# R: Lenguage de programación especializado en estadística
# Para el curso vamos a necesitar:
# - [R](https://cran.r-project.org/).
# - [RStudio](https://www.rstudio.com/products/rstudio/download/).
# - Dataset 1: [El dataset de Orange Economy](https://github.com/sap0408/Orange-Economy). (Csv)
# - Dataset 2: [https://github.com/sap0408/mtcars]
# - Colocar los Datasets en la misma carpeta donde está situado Fundamentos.ipynb (el script)
# Actualmente estamos viviendo la 4ta revolución industrial, la revolución del **Big Data**.
# Big Data se compone de tres componentes claves:
# - **Volumen:** tiene una cantidad de datos mucho mayor a la soportada dentro de un Excel.
# - **Velocidad:** mayor a la acostumbrada con anterioridad.
# - **Variedad:** se manejan datos estructurados y no estructurados como fotos, mensajes, etc.
# También se analiza el Small Data (datos de nuestras empresas, o casos focalizados)
# Un científico de datos necesita tener los conocimientos de:
# - Matemáticas y estadística.
# - Programación.
# - Conocimiento del negocio o contexto.
# - Habilidad para visualizar los datos y capacidad para comunicarlos.
# Para la ciencia de datos es común utilizar dos lenguajes: R y Python. En este curso veremos R, un lenguaje especializado en manejar datos de manera estadística creado en 1993 en la universidad de Auckland Nueva Zelanda.
# A lo largo del curso veremos:
# - Estructuras, tipos de datos y sintaxis.
# - EDA: Exploratory data analysis.
# - Estadística descriptiva.
# - Ajuste de datos.
# - Visualización de datos.
# - Organización de información con R Markdown.
# **¿Qué es la economía naranja?**
# Es la intersección de las industrias culturales con las áreas de soporte como el desarrollo de aplicaciones o software.
# Buscaremos responder a la pregunta:
# *Si tienes un startup de desarrollo de software, ¿en qué país abrirías una oficina?*
# El dataset de economía naranja fue creado por la profesora con las siguientes variables:
# - Aporte de servicios a PIB.
# - Aporte de economía naranja a PIB.
# - Penetración de internet.
# - Inflación.
# - Tasa de desempleo.
# - Población debajo de la línea de pobreza.
# - Edad mediana de la población.
# - Porcentaje de la población entre 25-54 años.
# - Inversión en educación %PIB.
# Instalación de los programas descargados al inicio del curso.
# - [R](https://cran.r-project.org/).
# - [RStudio](https://www.rstudio.com/products/rstudio/download/).
# - [El dataset de Orange Economy](https://github.com/sap0408/Orange-Economy). (Csv)
# - [https://github.com/sap0408/mtcars]
# Importamos los Archivos a utilizar
# Si deseas importar un archivo CSV con la opción de encabezado (header) en "YES"
# para indicar que la primera fila contiene los nombres de las columnas
# se puede utilizar el parámetro header de la función read.csv().
orangeec <- read.csv("./orangeec.csv", header = TRUE)
mtcars <- read.csv("./mtcars.csv", header = TRUE)
# La función View nos muestra nuestro dataset en forma de tabla.
# Podemos cargar la vista de un csv con la funcion **View(nombre_dataset)**
View(mtcars)
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb |
|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <int> | <dbl> | <int> | <dbl> | <dbl> | <dbl> | <int> | <int> | <int> | <int> |
| Mazda RX4 | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 |
| Mazda RX4 Wag | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 |
| Datsun 710 | 22.8 | 4 | 108.0 | 93 | 3.85 | 2.320 | 18.61 | 1 | 1 | 4 | 1 |
| Hornet 4 Drive | 21.4 | 6 | 258.0 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 |
| Hornet Sportabout | 18.7 | 8 | 360.0 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 |
| Valiant | 18.1 | 6 | 225.0 | 105 | 2.76 | 3.460 | 20.22 | 1 | 0 | 3 | 1 |
| Duster 360 | 14.3 | 8 | 360.0 | 245 | 3.21 | 3.570 | 15.84 | 0 | 0 | 3 | 4 |
| Merc 240D | 24.4 | 4 | 146.7 | 62 | 3.69 | 3.190 | 20.00 | 1 | 0 | 4 | 2 |
| Merc 230 | 22.8 | 4 | 140.8 | 95 | 3.92 | 3.150 | 22.90 | 1 | 0 | 4 | 2 |
| Merc 280 | 19.2 | 6 | 167.6 | 123 | 3.92 | 3.440 | 18.30 | 1 | 0 | 4 | 4 |
| Merc 280C | 17.8 | 6 | 167.6 | 123 | 3.92 | 3.440 | 18.90 | 1 | 0 | 4 | 4 |
| Merc 450SE | 16.4 | 8 | 275.8 | 180 | 3.07 | 4.070 | 17.40 | 0 | 0 | 3 | 3 |
| Merc 450SL | 17.3 | 8 | 275.8 | 180 | 3.07 | 3.730 | 17.60 | 0 | 0 | 3 | 3 |
| Merc 450SLC | 15.2 | 8 | 275.8 | 180 | 3.07 | 3.780 | 18.00 | 0 | 0 | 3 | 3 |
| Cadillac Fleetwood | 10.4 | 8 | 472.0 | 205 | 2.93 | 5.250 | 17.98 | 0 | 0 | 3 | 4 |
| Lincoln Continental | 10.4 | 8 | 460.0 | 215 | 3.00 | 5.424 | 17.82 | 0 | 0 | 3 | 4 |
| Chrysler Imperial | 14.7 | 8 | 440.0 | 230 | 3.23 | 5.345 | 17.42 | 0 | 0 | 3 | 4 |
| Fiat 128 | 32.4 | 4 | 78.7 | 66 | 4.08 | 2.200 | 19.47 | 1 | 1 | 4 | 1 |
| Honda Civic | 30.4 | 4 | 75.7 | 52 | 4.93 | 1.615 | 18.52 | 1 | 1 | 4 | 2 |
| Toyota Corolla | 33.9 | 4 | 71.1 | 65 | 4.22 | 1.835 | 19.90 | 1 | 1 | 4 | 1 |
| Toyota Corona | 21.5 | 4 | 120.1 | 97 | 3.70 | 2.465 | 20.01 | 1 | 0 | 3 | 1 |
| Dodge Challenger | 15.5 | 8 | 318.0 | 150 | 2.76 | 3.520 | 16.87 | 0 | 0 | 3 | 2 |
| AMC Javelin | 15.2 | 8 | 304.0 | 150 | 3.15 | 3.435 | 17.30 | 0 | 0 | 3 | 2 |
| Camaro Z28 | 13.3 | 8 | 350.0 | 245 | 3.73 | 3.840 | 15.41 | 0 | 0 | 3 | 4 |
| Pontiac Firebird | 19.2 | 8 | 400.0 | 175 | 3.08 | 3.845 | 17.05 | 0 | 0 | 3 | 2 |
| Fiat X1-9 | 27.3 | 4 | 79.0 | 66 | 4.08 | 1.935 | 18.90 | 1 | 1 | 4 | 1 |
| Porsche 914-2 | 26.0 | 4 | 120.3 | 91 | 4.43 | 2.140 | 16.70 | 0 | 1 | 5 | 2 |
| Lotus Europa | 30.4 | 4 | 95.1 | 113 | 3.77 | 1.513 | 16.90 | 1 | 1 | 5 | 2 |
| Ford Pantera L | 15.8 | 8 | 351.0 | 264 | 4.22 | 3.170 | 14.50 | 0 | 1 | 5 | 4 |
| Ferrari Dino | 19.7 | 6 | 145.0 | 175 | 3.62 | 2.770 | 15.50 | 0 | 1 | 5 | 6 |
| Maserati Bora | 15.0 | 8 | 301.0 | 335 | 3.54 | 3.570 | 14.60 | 0 | 1 | 5 | 8 |
| Volvo 142E | 21.4 | 4 | 121.0 | 109 | 4.11 | 2.780 | 18.60 | 1 | 1 | 4 | 2 |
Dos comandos que utilizaras muy seguidos son:
(Ctrl + L): Se encarga de borrar la consola. (Ctrl + Enter): Realiza la operación que selecciones.
Asignar un valor a una variable dentro de R se hace mediante el par de signos <- quedando, por ejemplo: x <- 10
# Ejemplos:
Oficina = 7
Transporte <- 1.5
Tiempo_al_dia <- Oficina + Transporte
Tiempo_al_dia
Corte_1 <- 0.3
Corte_2 <- 0.3
Corte_3 <- 0.4
Nota_1 <- 4.0
Nota_2 <- 4.6
Nota_3 <- 3.0
Nota_c_1 <- Nota_1 * Corte_1
Nota_c_1
Nota_c_2 <- Nota_2 * Corte_2
Nota_c_2
Nota_c_3 <- Nota_3 * Corte_3
Nota_c_3
Nota_final <- Nota_1 + Nota_2 + Nota_3
Nota_final
View(mtcars)
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb |
|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <int> | <dbl> | <int> | <dbl> | <dbl> | <dbl> | <int> | <int> | <int> | <int> |
| Mazda RX4 | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 |
| Mazda RX4 Wag | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 |
| Datsun 710 | 22.8 | 4 | 108.0 | 93 | 3.85 | 2.320 | 18.61 | 1 | 1 | 4 | 1 |
| Hornet 4 Drive | 21.4 | 6 | 258.0 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 |
| Hornet Sportabout | 18.7 | 8 | 360.0 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 |
| Valiant | 18.1 | 6 | 225.0 | 105 | 2.76 | 3.460 | 20.22 | 1 | 0 | 3 | 1 |
| Duster 360 | 14.3 | 8 | 360.0 | 245 | 3.21 | 3.570 | 15.84 | 0 | 0 | 3 | 4 |
| Merc 240D | 24.4 | 4 | 146.7 | 62 | 3.69 | 3.190 | 20.00 | 1 | 0 | 4 | 2 |
| Merc 230 | 22.8 | 4 | 140.8 | 95 | 3.92 | 3.150 | 22.90 | 1 | 0 | 4 | 2 |
| Merc 280 | 19.2 | 6 | 167.6 | 123 | 3.92 | 3.440 | 18.30 | 1 | 0 | 4 | 4 |
| Merc 280C | 17.8 | 6 | 167.6 | 123 | 3.92 | 3.440 | 18.90 | 1 | 0 | 4 | 4 |
| Merc 450SE | 16.4 | 8 | 275.8 | 180 | 3.07 | 4.070 | 17.40 | 0 | 0 | 3 | 3 |
| Merc 450SL | 17.3 | 8 | 275.8 | 180 | 3.07 | 3.730 | 17.60 | 0 | 0 | 3 | 3 |
| Merc 450SLC | 15.2 | 8 | 275.8 | 180 | 3.07 | 3.780 | 18.00 | 0 | 0 | 3 | 3 |
| Cadillac Fleetwood | 10.4 | 8 | 472.0 | 205 | 2.93 | 5.250 | 17.98 | 0 | 0 | 3 | 4 |
| Lincoln Continental | 10.4 | 8 | 460.0 | 215 | 3.00 | 5.424 | 17.82 | 0 | 0 | 3 | 4 |
| Chrysler Imperial | 14.7 | 8 | 440.0 | 230 | 3.23 | 5.345 | 17.42 | 0 | 0 | 3 | 4 |
| Fiat 128 | 32.4 | 4 | 78.7 | 66 | 4.08 | 2.200 | 19.47 | 1 | 1 | 4 | 1 |
| Honda Civic | 30.4 | 4 | 75.7 | 52 | 4.93 | 1.615 | 18.52 | 1 | 1 | 4 | 2 |
| Toyota Corolla | 33.9 | 4 | 71.1 | 65 | 4.22 | 1.835 | 19.90 | 1 | 1 | 4 | 1 |
| Toyota Corona | 21.5 | 4 | 120.1 | 97 | 3.70 | 2.465 | 20.01 | 1 | 0 | 3 | 1 |
| Dodge Challenger | 15.5 | 8 | 318.0 | 150 | 2.76 | 3.520 | 16.87 | 0 | 0 | 3 | 2 |
| AMC Javelin | 15.2 | 8 | 304.0 | 150 | 3.15 | 3.435 | 17.30 | 0 | 0 | 3 | 2 |
| Camaro Z28 | 13.3 | 8 | 350.0 | 245 | 3.73 | 3.840 | 15.41 | 0 | 0 | 3 | 4 |
| Pontiac Firebird | 19.2 | 8 | 400.0 | 175 | 3.08 | 3.845 | 17.05 | 0 | 0 | 3 | 2 |
| Fiat X1-9 | 27.3 | 4 | 79.0 | 66 | 4.08 | 1.935 | 18.90 | 1 | 1 | 4 | 1 |
| Porsche 914-2 | 26.0 | 4 | 120.3 | 91 | 4.43 | 2.140 | 16.70 | 0 | 1 | 5 | 2 |
| Lotus Europa | 30.4 | 4 | 95.1 | 113 | 3.77 | 1.513 | 16.90 | 1 | 1 | 5 | 2 |
| Ford Pantera L | 15.8 | 8 | 351.0 | 264 | 4.22 | 3.170 | 14.50 | 0 | 1 | 5 | 4 |
| Ferrari Dino | 19.7 | 6 | 145.0 | 175 | 3.62 | 2.770 | 15.50 | 0 | 1 | 5 | 6 |
| Maserati Bora | 15.0 | 8 | 301.0 | 335 | 3.54 | 3.570 | 14.60 | 0 | 1 | 5 | 8 |
| Volvo 142E | 21.4 | 4 | 121.0 | 109 | 4.11 | 2.780 | 18.60 | 1 | 1 | 4 | 2 |
View(orangeec)
| Country | GDP.PC | GDP.US.bill | GDP.Growth.. | Services...GDP | Creat.Ind...GDP | Inflation | Unemployment | X..pop.below.poverty.line | Internet.penetration...population | Median.age | X..pop.25.54 | Education.invest...GDP |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <int> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> |
| Argentina | 20900 | 637.7 | 2.9 | 60.9 | 3.8 | 25.7 | 8.1 | 25.7 | 93.1 | 31.7 | 39.38 | 5.9 |
| Belize | 8300 | 1854.0 | 0.8 | 62.2 | NA | 1.1 | 10.1 | 41.0 | 52.3 | 22.7 | 36.62 | 7.4 |
| Bolivia | 7500 | 37.1 | 4.2 | 50.0 | NA | 2.8 | 4.0 | 38.6 | 78.6 | 24.3 | 37.48 | 7.3 |
| Brazil | 15600 | 2055000.0 | 1.0 | 72.8 | 2.6 | 3.4 | 11.8 | 4.2 | 70.7 | 32.0 | 43.86 | 5.9 |
| Chile | 24500 | 277.0 | 1.5 | 64.3 | 2.2 | 2.2 | 7.0 | 14.4 | 77.5 | 34.4 | 43.08 | 4.9 |
| Colombia | 14500 | 309.2 | 1.8 | 61.4 | 3.3 | 4.3 | 10.5 | 28.0 | 63.2 | 30.0 | 41.91 | 4.5 |
| Costa Rica | 16900 | 58.1 | 3.2 | 73.5 | 2.0 | 1.6 | 8.1 | 21.7 | 86.7 | 31.3 | 44.03 | 7.1 |
| Ecuador | 11500 | 102.3 | 2.7 | 56.9 | 2.0 | 0.4 | 4.6 | 21.5 | 79.9 | 27.7 | 39.59 | 5.0 |
| El Salvador | 8900 | 28.0 | 2.4 | 64.9 | NA | 1.0 | 7.0 | 32.7 | 57.7 | 27.1 | 39.23 | 3.5 |
| Guatemala | 8100 | 75.7 | 2.8 | 63.2 | NA | 4.4 | 2.3 | 59.3 | 42.1 | 22.1 | 34.12 | 2.8 |
| Honduras | 5600 | 22.9 | 4.8 | 57.8 | NA | 3.9 | 5.9 | 29.6 | 38.2 | 23.0 | 36.63 | 5.9 |
| Mexico | 19900 | 1149000.0 | 2.0 | 64.0 | 7.4 | 6.0 | 3.6 | 46.2 | 65.0 | 28.3 | 40.81 | 5.3 |
| Nicaragua | 5800 | 13.7 | 4.9 | 50.8 | NA | 3.9 | 6.5 | 29.6 | 43.0 | 25.7 | 40.24 | 4.5 |
| Panama | 25400 | 61.8 | 5.4 | 82.0 | 6.3 | 0.9 | 5.5 | 23.0 | 69.7 | 29.2 | 40.35 | 3.2 |
| Paraguay | 9800 | 29.6 | 4.3 | 54.5 | 4.1 | 3.6 | 6.5 | 22.2 | 89.6 | 28.2 | 41.08 | 5.0 |
| Peru | 13300 | 215.2 | 2.5 | 56.8 | 1.5 | 2.8 | 6.7 | 22.7 | 67.6 | 28.0 | 40.19 | 3.8 |
| Uruguay | 22400 | 58.4 | 3.1 | 68.8 | 1.0 | 6.2 | 7.3 | 9.7 | 88.2 | 35.0 | 39.34 | 4.4 |
#str(mtcars) significa estructura(dataset)
str(mtcars)
'data.frame': 32 obs. of 12 variables: $ model: chr "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ... $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... $ cyl : int 6 6 4 6 8 6 8 4 4 6 ... $ disp : num 160 160 108 258 360 ... $ hp : int 110 110 93 110 175 105 245 62 95 123 ... $ drat : num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ... $ wt : num 2.62 2.88 2.32 3.21 3.44 ... $ qsec : num 16.5 17 18.6 19.4 17 ... $ vs : int 0 0 1 1 0 1 0 1 1 1 ... $ am : int 1 1 1 0 0 0 0 0 0 0 ... $ gear : int 4 4 4 3 3 3 3 4 4 4 ... $ carb : int 4 4 1 1 2 1 4 2 2 4 ...
# Dentro de la consola escribimos ?mtcars para obtner más información sobre
# nuestro de nuestro dataset, abrirá la ayuda correspondiente a nuestro dataset
?mtcars
# Ver clase o tipo de dato de la variable vs del DataFrame,
# pero debería ser booleana
class(mtcars$vs)
# sustituir el tipo de variable(tipo de clase)
mtcars$vs = as.logical(mtcars$vs) # logical significa booleana
mtcars$am = as.logical(mtcars$am)
# Vemos de nuevo la estructura del datase
str(mtcars)
'data.frame': 32 obs. of 12 variables: $ model: chr "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ... $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... $ cyl : int 6 6 4 6 8 6 8 4 4 6 ... $ disp : num 160 160 108 258 360 ... $ hp : int 110 110 93 110 175 105 245 62 95 123 ... $ drat : num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ... $ wt : num 2.62 2.88 2.32 3.21 3.44 ... $ qsec : num 16.5 17 18.6 19.4 17 ... $ vs : logi FALSE FALSE TRUE TRUE FALSE TRUE ... $ am : logi TRUE TRUE TRUE FALSE FALSE FALSE ... $ gear : int 4 4 4 3 3 3 3 4 4 4 ... $ carb : int 4 4 1 1 2 1 4 2 2 4 ...
#str(mtcars) significa estructura(dataset)
str(mtcars)
?mtcars
'data.frame': 32 obs. of 12 variables: $ model: chr "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ... $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... $ cyl : int 6 6 4 6 8 6 8 4 4 6 ... $ disp : num 160 160 108 258 360 ... $ hp : int 110 110 93 110 175 105 245 62 95 123 ... $ drat : num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ... $ wt : num 2.62 2.88 2.32 3.21 3.44 ... $ qsec : num 16.5 17 18.6 19.4 17 ... $ vs : logi FALSE FALSE TRUE TRUE FALSE TRUE ... $ am : logi TRUE TRUE TRUE FALSE FALSE FALSE ... $ gear : int 4 4 4 3 3 3 3 4 4 4 ... $ carb : int 4 4 1 1 2 1 4 2 2 4 ...
#ver clase de variable vs del DataFrame
class(mtcars$vs)
# sustituir el tipo de variable(tipo de clase)
mtcars$vs = as.logical(mtcars$vs) # los pasa a booleano
mtcars$am = as.logical(mtcars$am)
# Vemos de nuevo la estructura del datase
str(mtcars)
'data.frame': 32 obs. of 12 variables: $ model: chr "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ... $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... $ cyl : int 6 6 4 6 8 6 8 4 4 6 ... $ disp : num 160 160 108 258 360 ... $ hp : int 110 110 93 110 175 105 245 62 95 123 ... $ drat : num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ... $ wt : num 2.62 2.88 2.32 3.21 3.44 ... $ qsec : num 16.5 17 18.6 19.4 17 ... $ vs : logi FALSE FALSE TRUE TRUE FALSE TRUE ... $ am : logi TRUE TRUE TRUE FALSE FALSE FALSE ... $ gear : int 4 4 4 3 3 3 3 4 4 4 ... $ carb : int 4 4 1 1 2 1 4 2 2 4 ...
# summary(): Muestra un resumen del dataset que le mandemos
# (similar a Describe de Pandas).
# transform(): Modifica los valores de un dataset.
# Exploramos tipos de datos
str(orangeec)
'data.frame': 17 obs. of 13 variables: $ Country : chr "Argentina" "Belize" "Bolivia" "Brazil" ... $ GDP.PC : int 20900 8300 7500 15600 24500 14500 16900 11500 8900 8100 ... $ GDP.US.bill : num 6.38e+02 1.85e+03 3.71e+01 2.06e+06 2.77e+02 ... $ GDP.Growth.. : num 2.9 0.8 4.2 1 1.5 1.8 3.2 2.7 2.4 2.8 ... $ Services...GDP : num 60.9 62.2 50 72.8 64.3 61.4 73.5 56.9 64.9 63.2 ... $ Creat.Ind...GDP : num 3.8 NA NA 2.6 2.2 3.3 2 2 NA NA ... $ Inflation : num 25.7 1.1 2.8 3.4 2.2 4.3 1.6 0.4 1 4.4 ... $ Unemployment : num 8.1 10.1 4 11.8 7 10.5 8.1 4.6 7 2.3 ... $ X..pop.below.poverty.line : num 25.7 41 38.6 4.2 14.4 28 21.7 21.5 32.7 59.3 ... $ Internet.penetration...population: num 93.1 52.3 78.6 70.7 77.5 63.2 86.7 79.9 57.7 42.1 ... $ Median.age : num 31.7 22.7 24.3 32 34.4 30 31.3 27.7 27.1 22.1 ... $ X..pop.25.54 : num 39.4 36.6 37.5 43.9 43.1 ... $ Education.invest...GDP : num 5.9 7.4 7.3 5.9 4.9 4.5 7.1 5 3.5 2.8 ...
#Summary / el Describe de pandas
summary(orangeec)
Country GDP.PC GDP.US.bill GDP.Growth..
Length:17 Min. : 5600 Min. : 13.7 Min. :0.800
Class :character 1st Qu.: 8300 1st Qu.: 37.1 1st Qu.:2.000
Mode :character Median :13300 Median : 75.7 Median :2.800
Mean :14053 Mean : 188693.0 Mean :2.959
3rd Qu.:19900 3rd Qu.: 309.2 3rd Qu.:4.200
Max. :25400 Max. :2055000.0 Max. :5.400
Services...GDP Creat.Ind...GDP Inflation Unemployment
Min. :50.00 Min. :1.000 Min. : 0.400 Min. : 2.300
1st Qu.:56.90 1st Qu.:2.000 1st Qu.: 1.600 1st Qu.: 5.500
Median :62.20 Median :2.600 Median : 3.400 Median : 6.700
Mean :62.64 Mean :3.291 Mean : 4.365 Mean : 6.794
3rd Qu.:64.90 3rd Qu.:3.950 3rd Qu.: 4.300 3rd Qu.: 8.100
Max. :82.00 Max. :7.400 Max. :25.700 Max. :11.800
NA's :6
X..pop.below.poverty.line Internet.penetration...population Median.age
Min. : 4.20 Min. :38.20 Min. :22.10
1st Qu.:21.70 1st Qu.:57.70 1st Qu.:25.70
Median :25.70 Median :69.70 Median :28.20
Mean :27.65 Mean :68.42 Mean :28.28
3rd Qu.:32.70 3rd Qu.:79.90 3rd Qu.:31.30
Max. :59.30 Max. :93.10 Max. :35.00
X..pop.25.54 Education.invest...GDP
Min. :34.12 Min. :2.800
1st Qu.:39.23 1st Qu.:4.400
Median :40.19 Median :5.000
Mean :39.88 Mean :5.082
3rd Qu.:41.08 3rd Qu.:5.900
Max. :44.03 Max. :7.400
# Exploramos el 2do dataset
summary(mtcars) # Summary significa RESUMEN
model mpg cyl disp
Length:32 Min. :10.40 Min. :4.000 Min. : 71.1
Class :character 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8
Mode :character Median :19.20 Median :6.000 Median :196.3
Mean :20.09 Mean :6.188 Mean :230.7
3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0
Max. :33.90 Max. :8.000 Max. :472.0
hp drat wt qsec
Min. : 52.0 Min. :2.760 Min. :1.513 Min. :14.50
1st Qu.: 96.5 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89
Median :123.0 Median :3.695 Median :3.325 Median :17.71
Mean :146.7 Mean :3.597 Mean :3.217 Mean :17.85
3rd Qu.:180.0 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90
Max. :335.0 Max. :4.930 Max. :5.424 Max. :22.90
vs am gear carb
Mode :logical Mode :logical Min. :3.000 Min. :1.000
FALSE:18 FALSE:19 1st Qu.:3.000 1st Qu.:2.000
TRUE :14 TRUE :13 Median :4.000 Median :2.000
Mean :3.688 Mean :2.812
3rd Qu.:4.000 3rd Qu.:4.000
Max. :5.000 Max. :8.000
# Realizamos la conversion de datos de mtcars de sistema imperial a decimal
# convirtiendo la variable wt a [kg]
wt <- (mtcars$wt*1000)/2
wt
# Guardamos un nuevo dataset
mtcars.new <- transform(mtcars,wt=wt*1000/2)
mtcars.new
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb |
|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <int> | <dbl> | <int> | <dbl> | <dbl> | <dbl> | <lgl> | <lgl> | <int> | <int> |
| Mazda RX4 | 21.0 | 6 | 160.0 | 110 | 3.90 | 1310.0 | 16.46 | FALSE | TRUE | 4 | 4 |
| Mazda RX4 Wag | 21.0 | 6 | 160.0 | 110 | 3.90 | 1437.5 | 17.02 | FALSE | TRUE | 4 | 4 |
| Datsun 710 | 22.8 | 4 | 108.0 | 93 | 3.85 | 1160.0 | 18.61 | TRUE | TRUE | 4 | 1 |
| Hornet 4 Drive | 21.4 | 6 | 258.0 | 110 | 3.08 | 1607.5 | 19.44 | TRUE | FALSE | 3 | 1 |
| Hornet Sportabout | 18.7 | 8 | 360.0 | 175 | 3.15 | 1720.0 | 17.02 | FALSE | FALSE | 3 | 2 |
| Valiant | 18.1 | 6 | 225.0 | 105 | 2.76 | 1730.0 | 20.22 | TRUE | FALSE | 3 | 1 |
| Duster 360 | 14.3 | 8 | 360.0 | 245 | 3.21 | 1785.0 | 15.84 | FALSE | FALSE | 3 | 4 |
| Merc 240D | 24.4 | 4 | 146.7 | 62 | 3.69 | 1595.0 | 20.00 | TRUE | FALSE | 4 | 2 |
| Merc 230 | 22.8 | 4 | 140.8 | 95 | 3.92 | 1575.0 | 22.90 | TRUE | FALSE | 4 | 2 |
| Merc 280 | 19.2 | 6 | 167.6 | 123 | 3.92 | 1720.0 | 18.30 | TRUE | FALSE | 4 | 4 |
| Merc 280C | 17.8 | 6 | 167.6 | 123 | 3.92 | 1720.0 | 18.90 | TRUE | FALSE | 4 | 4 |
| Merc 450SE | 16.4 | 8 | 275.8 | 180 | 3.07 | 2035.0 | 17.40 | FALSE | FALSE | 3 | 3 |
| Merc 450SL | 17.3 | 8 | 275.8 | 180 | 3.07 | 1865.0 | 17.60 | FALSE | FALSE | 3 | 3 |
| Merc 450SLC | 15.2 | 8 | 275.8 | 180 | 3.07 | 1890.0 | 18.00 | FALSE | FALSE | 3 | 3 |
| Cadillac Fleetwood | 10.4 | 8 | 472.0 | 205 | 2.93 | 2625.0 | 17.98 | FALSE | FALSE | 3 | 4 |
| Lincoln Continental | 10.4 | 8 | 460.0 | 215 | 3.00 | 2712.0 | 17.82 | FALSE | FALSE | 3 | 4 |
| Chrysler Imperial | 14.7 | 8 | 440.0 | 230 | 3.23 | 2672.5 | 17.42 | FALSE | FALSE | 3 | 4 |
| Fiat 128 | 32.4 | 4 | 78.7 | 66 | 4.08 | 1100.0 | 19.47 | TRUE | TRUE | 4 | 1 |
| Honda Civic | 30.4 | 4 | 75.7 | 52 | 4.93 | 807.5 | 18.52 | TRUE | TRUE | 4 | 2 |
| Toyota Corolla | 33.9 | 4 | 71.1 | 65 | 4.22 | 917.5 | 19.90 | TRUE | TRUE | 4 | 1 |
| Toyota Corona | 21.5 | 4 | 120.1 | 97 | 3.70 | 1232.5 | 20.01 | TRUE | FALSE | 3 | 1 |
| Dodge Challenger | 15.5 | 8 | 318.0 | 150 | 2.76 | 1760.0 | 16.87 | FALSE | FALSE | 3 | 2 |
| AMC Javelin | 15.2 | 8 | 304.0 | 150 | 3.15 | 1717.5 | 17.30 | FALSE | FALSE | 3 | 2 |
| Camaro Z28 | 13.3 | 8 | 350.0 | 245 | 3.73 | 1920.0 | 15.41 | FALSE | FALSE | 3 | 4 |
| Pontiac Firebird | 19.2 | 8 | 400.0 | 175 | 3.08 | 1922.5 | 17.05 | FALSE | FALSE | 3 | 2 |
| Fiat X1-9 | 27.3 | 4 | 79.0 | 66 | 4.08 | 967.5 | 18.90 | TRUE | TRUE | 4 | 1 |
| Porsche 914-2 | 26.0 | 4 | 120.3 | 91 | 4.43 | 1070.0 | 16.70 | FALSE | TRUE | 5 | 2 |
| Lotus Europa | 30.4 | 4 | 95.1 | 113 | 3.77 | 756.5 | 16.90 | TRUE | TRUE | 5 | 2 |
| Ford Pantera L | 15.8 | 8 | 351.0 | 264 | 4.22 | 1585.0 | 14.50 | FALSE | TRUE | 5 | 4 |
| Ferrari Dino | 19.7 | 6 | 145.0 | 175 | 3.62 | 1385.0 | 15.50 | FALSE | TRUE | 5 | 6 |
| Maserati Bora | 15.0 | 8 | 301.0 | 335 | 3.54 | 1785.0 | 14.60 | FALSE | TRUE | 5 | 8 |
| Volvo 142E | 21.4 | 4 | 121.0 | 109 | 4.11 | 1390.0 | 18.60 | TRUE | TRUE | 4 | 2 |
summary(mtcars.new) # Resumen del DataSet mtcars
model mpg cyl disp
Length:32 Min. :10.40 Min. :4.000 Min. : 71.1
Class :character 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8
Mode :character Median :19.20 Median :6.000 Median :196.3
Mean :20.09 Mean :6.188 Mean :230.7
3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0
Max. :33.90 Max. :8.000 Max. :472.0
hp drat wt qsec
Min. : 52.0 Min. :2.760 Min. : 756.5 Min. :14.50
1st Qu.: 96.5 1st Qu.:3.080 1st Qu.:1290.6 1st Qu.:16.89
Median :123.0 Median :3.695 Median :1662.5 Median :17.71
Mean :146.7 Mean :3.597 Mean :1608.6 Mean :17.85
3rd Qu.:180.0 3rd Qu.:3.920 3rd Qu.:1805.0 3rd Qu.:18.90
Max. :335.0 Max. :4.930 Max. :2712.0 Max. :22.90
vs am gear carb
Mode :logical Mode :logical Min. :3.000 Min. :1.000
FALSE:18 FALSE:19 1st Qu.:3.000 1st Qu.:2.000
TRUE :14 TRUE :13 Median :4.000 Median :2.000
Mean :3.688 Mean :2.812
3rd Qu.:4.000 3rd Qu.:4.000
Max. :5.000 Max. :8.000
# Los vectores pueden ser de un solo tipo de dato y multidimensionales
# c signidica "contenedor"
tiempo_platzi <- c(25,5,10,15,10)
tiempo_lecturas <- c(30,10,5,10,5)
tiempo_aprendizaje <- tiempo_platzi + tiempo_lecturas # Suma punto a punto
tiempo_aprendizaje
# Ejemplo: Vector de Strings
dias_aprendizaje <- c("Lunes", "Martes", "Miércoles", "Jueves", "Viernes")
dias_aprendizaje
# Vector Booleano
dias_mas_20min <- c(TRUE, FALSE, FALSE, TRUE, TRUE)
dias_mas_20min
## Sumando datos numéricos dentro de un vector . . .
total_tiempo_platzi <- sum(tiempo_platzi)
total_tiempo_platzi
total_tiempo_lecturas <- sum(tiempo_lecturas)
total_tiempo_lecturas
total_tiempo <- total_tiempo_platzi + total_tiempo_lecturas
total_tiempo
# Una matriz debe tener elementos del mismo tipo de datos,
# si tiene datos de tipos diferentes es un dataFrame.
# Para crear una matriz en R utilizaremos la función matrix cuyos argumentos son:
# 1.- La información de los elementos que componen la matriz (pueden ser vectores).
# 2.- **nrow:** número de filas.
# Nrow = Se refiere a la cantidad de filas, recuerden que las filas son las horizontales.
# Es importante tener en cuenta que la función cuenta la cantidad total de elementos de los datos
# y los divide entre la cantidad de filas que quieras, por lo que si la división no es exacta
# se repetirán los primeros elementos de los datos.
# 3.- **ncol:** número de columnas.
# 4.- **byrow:** booleano para indicar si llenar la matriz por filas.
# **colSums** es una función que por argumento recibe una matriz y te retorna la suma de los valores de sus columnas.
## Vectors
tiempo_platzi <- c(25,5,10,15,10)
tiempo_lecturas <- c(30,10,5,10,5)
# En este ejemplo la profesora usa un nuevo vector que recoge los elementos
# de los dos vectores anteriores:
# Vector1<-c(1,2,3)
# Vector2<-c(4,5,6)
# c(vector1,vector2) = 1,2,3,4,5,6
# Ella está mezclando los dos vectores anteriores en uno solo, también pueden
# hacer esto:
# Vector3<-c(vector1,vector2)
# matriz <- matrix(vector3, …) Y funcionará igual
## matrix
# c signidica "contenedor"
# Nrow = Se refiere a la cantidad de filas, recuerden que las filas son las horizontales.
# Es importante tener en cuenta que la función cuenta la cantidad total de elementos de los datos
# y los divide entre la cantidad de filas que quieras, por lo que si la división no es exacta
# se repetirán los primeros elementos de los datos.
tiempo_matrix <- matrix(c(tiempo_platzi, tiempo_lecturas),
nrow = 2,
byrow = TRUE
)
dias <- c("Lunes", "MarteS", "Miércoles", "Jueves", "Viernes")
Tiempo <- c("total_tiempo_platzi", "total_tiempo_lecturas")
# Definiendo nombre de columnas y filas
colnames(tiempo_matrix) <- dias
rownames(tiempo_matrix) <- Tiempo
tiempo_matrix
| Lunes | MarteS | Miércoles | Jueves | Viernes | |
|---|---|---|---|---|---|
| total_tiempo_platzi | 25 | 5 | 10 | 15 | 10 |
| total_tiempo_lecturas | 30 | 10 | 5 | 10 | 5 |
# Cuánto tiempo de estudio por día se está cumpliendo?
# Sumatoria por columna
tiempo_dia = colSums(tiempo_matrix)
tiempo_dia
# **rbind:** función para añadir una fila."Row bind"
# Para seleccionar rápidamente un elemento de una matriz solamente debemos
# indicar entre corchetes el número de la fila y de la columna (similar a python).
# Agregar una columna a nuestra matriz para indicar el día Sábado:
final_matrix <- rbind(tiempo_matrix,c(10,15,30,5,0))
final_matrix
| Lunes | MarteS | Miércoles | Jueves | Viernes | |
|---|---|---|---|---|---|
| total_tiempo_platzi | 25 | 5 | 10 | 15 | 10 |
| total_tiempo_lecturas | 30 | 10 | 5 | 10 | 5 |
| 10 | 15 | 30 | 5 | 0 |
# Una forma sencilla de agregar una columna incluyendo el nombre de cabecera seria:
# final_matrix <- cbind(final_matrix, Sabado = c(1, 2, 3))
final_matrix <- cbind(final_matrix, Sabado = c(1, 2, 3))
final_matrix
| Lunes | MarteS | Miércoles | Jueves | Viernes | Sabado | |
|---|---|---|---|---|---|---|
| total_tiempo_platzi | 25 | 5 | 10 | 15 | 10 | 1 |
| total_tiempo_lecturas | 30 | 10 | 5 | 10 | 5 | 2 |
| 10 | 15 | 30 | 5 | 0 | 3 |
# Agregar nombre a una fila específica
rownames(final_matrix)[3] <- "Tiempo_agregado"
final_matrix
| Lunes | MarteS | Miércoles | Jueves | Viernes | Sabado | |
|---|---|---|---|---|---|---|
| total_tiempo_platzi | 25 | 5 | 10 | 15 | 10 | 1 |
| total_tiempo_lecturas | 30 | 10 | 5 | 10 | 5 | 2 |
| Tiempo_agregado | 10 | 15 | 30 | 5 | 0 | 3 |
tiempo_dia = colSums(final_matrix)
tiempo_dia
# Ubicar elementos, se usan corchetes y un par de índices separados por coma.
final_matrix[1,5]
# Para usar ‘rename’ y así renombrar columnas se debe instalar el paquete plyr:
# library("plyr") # cargar la biblioteca plyr (atención a las comillas que no deben ser comillas curvas)
# ó
# en el panel de Packages dar check a la casilla de plyr
# En caso de no tener el paquete instalado solamente corremos en la consola el código install.packages("plyr"),
# después lo activas manual o con la consola.
install.packages("plyr")
mtcars[ mtcars$cyl<6,] # no olvidar la coma al final (tabla con cilindros menores a 6)
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <int> | <dbl> | <int> | <dbl> | <dbl> | <dbl> | <lgl> | <lgl> | <int> | <int> | |
| 3 | Datsun 710 | 22.8 | 4 | 108.0 | 93 | 3.85 | 2.320 | 18.61 | TRUE | TRUE | 4 | 1 |
| 8 | Merc 240D | 24.4 | 4 | 146.7 | 62 | 3.69 | 3.190 | 20.00 | TRUE | FALSE | 4 | 2 |
| 9 | Merc 230 | 22.8 | 4 | 140.8 | 95 | 3.92 | 3.150 | 22.90 | TRUE | FALSE | 4 | 2 |
| 18 | Fiat 128 | 32.4 | 4 | 78.7 | 66 | 4.08 | 2.200 | 19.47 | TRUE | TRUE | 4 | 1 |
| 19 | Honda Civic | 30.4 | 4 | 75.7 | 52 | 4.93 | 1.615 | 18.52 | TRUE | TRUE | 4 | 2 |
| 20 | Toyota Corolla | 33.9 | 4 | 71.1 | 65 | 4.22 | 1.835 | 19.90 | TRUE | TRUE | 4 | 1 |
| 21 | Toyota Corona | 21.5 | 4 | 120.1 | 97 | 3.70 | 2.465 | 20.01 | TRUE | FALSE | 3 | 1 |
| 26 | Fiat X1-9 | 27.3 | 4 | 79.0 | 66 | 4.08 | 1.935 | 18.90 | TRUE | TRUE | 4 | 1 |
| 27 | Porsche 914-2 | 26.0 | 4 | 120.3 | 91 | 4.43 | 2.140 | 16.70 | FALSE | TRUE | 5 | 2 |
| 28 | Lotus Europa | 30.4 | 4 | 95.1 | 113 | 3.77 | 1.513 | 16.90 | TRUE | TRUE | 5 | 2 |
| 32 | Volvo 142E | 21.4 | 4 | 121.0 | 109 | 4.11 | 2.780 | 18.60 | TRUE | TRUE | 4 | 2 |
#PBI mayor a 15000 dólares
orangeec[orangeec$GDP.PC>=15000,]
| Country | GDP.PC | GDP.US.bill | GDP.Growth.. | Services...GDP | Creat.Ind...GDP | Inflation | Unemployment | X..pop.below.poverty.line | Internet.penetration...population | Median.age | X..pop.25.54 | Education.invest...GDP | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <int> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | |
| 1 | Argentina | 20900 | 637.7 | 2.9 | 60.9 | 3.8 | 25.7 | 8.1 | 25.7 | 93.1 | 31.7 | 39.38 | 5.9 |
| 4 | Brazil | 15600 | 2055000.0 | 1.0 | 72.8 | 2.6 | 3.4 | 11.8 | 4.2 | 70.7 | 32.0 | 43.86 | 5.9 |
| 5 | Chile | 24500 | 277.0 | 1.5 | 64.3 | 2.2 | 2.2 | 7.0 | 14.4 | 77.5 | 34.4 | 43.08 | 4.9 |
| 7 | Costa Rica | 16900 | 58.1 | 3.2 | 73.5 | 2.0 | 1.6 | 8.1 | 21.7 | 86.7 | 31.3 | 44.03 | 7.1 |
| 12 | Mexico | 19900 | 1149000.0 | 2.0 | 64.0 | 7.4 | 6.0 | 3.6 | 46.2 | 65.0 | 28.3 | 40.81 | 5.3 |
| 14 | Panama | 25400 | 61.8 | 5.4 | 82.0 | 6.3 | 0.9 | 5.5 | 23.0 | 69.7 | 29.2 | 40.35 | 3.2 |
| 17 | Uruguay | 22400 | 58.4 | 3.1 | 68.8 | 1.0 | 6.2 | 7.3 | 9.7 | 88.2 | 35.0 | 39.34 | 4.4 |
# Aportan menos del 2% del Pib con la Eco Naranja
orangeec[orangeec$Creat.Ind...GDP<=2,]
| Country | GDP.PC | GDP.US.bill | GDP.Growth.. | Services...GDP | Creat.Ind...GDP | Inflation | Unemployment | X..pop.below.poverty.line | Internet.penetration...population | Median.age | X..pop.25.54 | Education.invest...GDP | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <int> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | |
| NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| NA.1 | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 7 | Costa Rica | 16900 | 58.1 | 3.2 | 73.5 | 2.0 | 1.6 | 8.1 | 21.7 | 86.7 | 31.3 | 44.03 | 7.1 |
| 8 | Ecuador | 11500 | 102.3 | 2.7 | 56.9 | 2.0 | 0.4 | 4.6 | 21.5 | 79.9 | 27.7 | 39.59 | 5.0 |
| NA.2 | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| NA.3 | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| NA.4 | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| NA.5 | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
| 16 | Peru | 13300 | 215.2 | 2.5 | 56.8 | 1.5 | 2.8 | 6.7 | 22.7 | 67.6 | 28.0 | 40.19 | 3.8 |
| 17 | Uruguay | 22400 | 58.4 | 3.1 | 68.8 | 1.0 | 6.2 | 7.3 | 9.7 | 88.2 | 35.0 | 39.34 | 4.4 |
# Subsets
neworangeeg <- subset(orangeec, Internet.penetration...population > 80 & Education.invest...GDP >= 4.5)
neworangeeg
| Country | GDP.PC | GDP.US.bill | GDP.Growth.. | Services...GDP | Creat.Ind...GDP | Inflation | Unemployment | X..pop.below.poverty.line | Internet.penetration...population | Median.age | X..pop.25.54 | Education.invest...GDP | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <int> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | |
| 1 | Argentina | 20900 | 637.7 | 2.9 | 60.9 | 3.8 | 25.7 | 8.1 | 25.7 | 93.1 | 31.7 | 39.38 | 5.9 |
| 7 | Costa Rica | 16900 | 58.1 | 3.2 | 73.5 | 2.0 | 1.6 | 8.1 | 21.7 | 86.7 | 31.3 | 44.03 | 7.1 |
| 15 | Paraguay | 9800 | 29.6 | 4.3 | 54.5 | 4.1 | 3.6 | 6.5 | 22.2 | 89.6 | 28.2 | 41.08 | 5.0 |
# Select lo utilizamos para seleccionar columnas
neworangeeg <- subset(orangeec, Internet.penetration...population > 80 & Education.invest...GDP >= 4.5, select = Creat.Ind...GDP)
neworangeeg
| Creat.Ind...GDP | |
|---|---|
| <dbl> | |
| 1 | 3.8 |
| 7 | 2.0 |
| 15 | 4.1 |
neworangeeg <- subset(orangeec, Internet.penetration...population > 80 & Education.invest...GDP >= 4.5, select = c("Country", "Creat.Ind...GDP"))
neworangeeg
| Country | Creat.Ind...GDP | |
|---|---|---|
| <chr> | <dbl> | |
| 1 | Argentina | 3.8 |
| 7 | Costa Rica | 2.0 |
| 15 | Paraguay | 4.1 |
# install.packages("plyr") si hiciera falta para usar la funcion rename(Tabla,c("nombre_antiguo"="nombre_actual"))
library("plyr") # cargar la biblioteca plyr
rename(orangeec,c("Creat.Ind...GDP"="AporteEcNja"))
| Country | GDP.PC | GDP.US.bill | GDP.Growth.. | Services...GDP | AporteEcNja | Inflation | Unemployment | X..pop.below.poverty.line | Internet.penetration...population | Median.age | X..pop.25.54 | Education.invest...GDP |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <int> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> |
| Argentina | 20900 | 637.7 | 2.9 | 60.9 | 3.8 | 25.7 | 8.1 | 25.7 | 93.1 | 31.7 | 39.38 | 5.9 |
| Belize | 8300 | 1854.0 | 0.8 | 62.2 | NA | 1.1 | 10.1 | 41.0 | 52.3 | 22.7 | 36.62 | 7.4 |
| Bolivia | 7500 | 37.1 | 4.2 | 50.0 | NA | 2.8 | 4.0 | 38.6 | 78.6 | 24.3 | 37.48 | 7.3 |
| Brazil | 15600 | 2055000.0 | 1.0 | 72.8 | 2.6 | 3.4 | 11.8 | 4.2 | 70.7 | 32.0 | 43.86 | 5.9 |
| Chile | 24500 | 277.0 | 1.5 | 64.3 | 2.2 | 2.2 | 7.0 | 14.4 | 77.5 | 34.4 | 43.08 | 4.9 |
| Colombia | 14500 | 309.2 | 1.8 | 61.4 | 3.3 | 4.3 | 10.5 | 28.0 | 63.2 | 30.0 | 41.91 | 4.5 |
| Costa Rica | 16900 | 58.1 | 3.2 | 73.5 | 2.0 | 1.6 | 8.1 | 21.7 | 86.7 | 31.3 | 44.03 | 7.1 |
| Ecuador | 11500 | 102.3 | 2.7 | 56.9 | 2.0 | 0.4 | 4.6 | 21.5 | 79.9 | 27.7 | 39.59 | 5.0 |
| El Salvador | 8900 | 28.0 | 2.4 | 64.9 | NA | 1.0 | 7.0 | 32.7 | 57.7 | 27.1 | 39.23 | 3.5 |
| Guatemala | 8100 | 75.7 | 2.8 | 63.2 | NA | 4.4 | 2.3 | 59.3 | 42.1 | 22.1 | 34.12 | 2.8 |
| Honduras | 5600 | 22.9 | 4.8 | 57.8 | NA | 3.9 | 5.9 | 29.6 | 38.2 | 23.0 | 36.63 | 5.9 |
| Mexico | 19900 | 1149000.0 | 2.0 | 64.0 | 7.4 | 6.0 | 3.6 | 46.2 | 65.0 | 28.3 | 40.81 | 5.3 |
| Nicaragua | 5800 | 13.7 | 4.9 | 50.8 | NA | 3.9 | 6.5 | 29.6 | 43.0 | 25.7 | 40.24 | 4.5 |
| Panama | 25400 | 61.8 | 5.4 | 82.0 | 6.3 | 0.9 | 5.5 | 23.0 | 69.7 | 29.2 | 40.35 | 3.2 |
| Paraguay | 9800 | 29.6 | 4.3 | 54.5 | 4.1 | 3.6 | 6.5 | 22.2 | 89.6 | 28.2 | 41.08 | 5.0 |
| Peru | 13300 | 215.2 | 2.5 | 56.8 | 1.5 | 2.8 | 6.7 | 22.7 | 67.6 | 28.0 | 40.19 | 3.8 |
| Uruguay | 22400 | 58.4 | 3.1 | 68.8 | 1.0 | 6.2 | 7.3 | 9.7 | 88.2 | 35.0 | 39.34 | 4.4 |
# **Factor:** Tipo de dato con variables categóricas.
# **head:** es una función que nos retorna los primeros elementos de un dataset, por defecto nos retorna los primeros 6.
# **tail:** función similar a head solamente que esta función nos retorna los últimos elementos.
# Además de poder visualizar un dataset con str podemos instalar el paquete dplyr: install.packages("dplyr").
# Una vez instalado usamos la función glimpse.
# Una lista es un vector genérico que puede contener objetos de todo tipo, en R para crear una lista
# se debe llamar a la función list y pasarle como argumentos los elementos.
# Factor
Nivel_Curso <- c("Básico","Intermedio","Avanzado")
Nivel_Curso
# Primeras Filas con head
head(mtcars)
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <int> | <dbl> | <int> | <dbl> | <dbl> | <dbl> | <lgl> | <lgl> | <int> | <int> | |
| 1 | Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 | 16.46 | FALSE | TRUE | 4 | 4 |
| 2 | Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 | 17.02 | FALSE | TRUE | 4 | 4 |
| 3 | Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 | 18.61 | TRUE | TRUE | 4 | 1 |
| 4 | Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 | 19.44 | TRUE | FALSE | 3 | 1 |
| 5 | Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 | 17.02 | FALSE | FALSE | 3 | 2 |
| 6 | Valiant | 18.1 | 6 | 225 | 105 | 2.76 | 3.460 | 20.22 | TRUE | FALSE | 3 | 1 |
head(orangeec)
| Country | GDP.PC | GDP.US.bill | GDP.Growth.. | Services...GDP | Creat.Ind...GDP | Inflation | Unemployment | X..pop.below.poverty.line | Internet.penetration...population | Median.age | X..pop.25.54 | Education.invest...GDP | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <int> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | |
| 1 | Argentina | 20900 | 637.7 | 2.9 | 60.9 | 3.8 | 25.7 | 8.1 | 25.7 | 93.1 | 31.7 | 39.38 | 5.9 |
| 2 | Belize | 8300 | 1854.0 | 0.8 | 62.2 | NA | 1.1 | 10.1 | 41.0 | 52.3 | 22.7 | 36.62 | 7.4 |
| 3 | Bolivia | 7500 | 37.1 | 4.2 | 50.0 | NA | 2.8 | 4.0 | 38.6 | 78.6 | 24.3 | 37.48 | 7.3 |
| 4 | Brazil | 15600 | 2055000.0 | 1.0 | 72.8 | 2.6 | 3.4 | 11.8 | 4.2 | 70.7 | 32.0 | 43.86 | 5.9 |
| 5 | Chile | 24500 | 277.0 | 1.5 | 64.3 | 2.2 | 2.2 | 7.0 | 14.4 | 77.5 | 34.4 | 43.08 | 4.9 |
| 6 | Colombia | 14500 | 309.2 | 1.8 | 61.4 | 3.3 | 4.3 | 10.5 | 28.0 | 63.2 | 30.0 | 41.91 | 4.5 |
# últimas filas
tail(mtcars)
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <int> | <dbl> | <int> | <dbl> | <dbl> | <dbl> | <lgl> | <lgl> | <int> | <int> | |
| 27 | Porsche 914-2 | 26.0 | 4 | 120.3 | 91 | 4.43 | 2.140 | 16.7 | FALSE | TRUE | 5 | 2 |
| 28 | Lotus Europa | 30.4 | 4 | 95.1 | 113 | 3.77 | 1.513 | 16.9 | TRUE | TRUE | 5 | 2 |
| 29 | Ford Pantera L | 15.8 | 8 | 351.0 | 264 | 4.22 | 3.170 | 14.5 | FALSE | TRUE | 5 | 4 |
| 30 | Ferrari Dino | 19.7 | 6 | 145.0 | 175 | 3.62 | 2.770 | 15.5 | FALSE | TRUE | 5 | 6 |
| 31 | Maserati Bora | 15.0 | 8 | 301.0 | 335 | 3.54 | 3.570 | 14.6 | FALSE | TRUE | 5 | 8 |
| 32 | Volvo 142E | 21.4 | 4 | 121.0 | 109 | 4.11 | 2.780 | 18.6 | TRUE | TRUE | 4 | 2 |
# La función head() por defecto devuelve los 6 primeros valores, pero este puede ser configurable
# añadiendo un parámetro (ídem con tail):
head(orangeec, n = 3)
| Country | GDP.PC | GDP.US.bill | GDP.Growth.. | Services...GDP | Creat.Ind...GDP | Inflation | Unemployment | X..pop.below.poverty.line | Internet.penetration...population | Median.age | X..pop.25.54 | Education.invest...GDP | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <int> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | |
| 1 | Argentina | 20900 | 637.7 | 2.9 | 60.9 | 3.8 | 25.7 | 8.1 | 25.7 | 93.1 | 31.7 | 39.38 | 5.9 |
| 2 | Belize | 8300 | 1854.0 | 0.8 | 62.2 | NA | 1.1 | 10.1 | 41.0 | 52.3 | 22.7 | 36.62 | 7.4 |
| 3 | Bolivia | 7500 | 37.1 | 4.2 | 50.0 | NA | 2.8 | 4.0 | 38.6 | 78.6 | 24.3 | 37.48 | 7.3 |
install.packages("dplyr")
library("dplyr")
# install.packages("dplyr")
# library("dplyr")
glimpse(orangeec) # vemos doubles and ints
Rows: 17 Columns: 13 $ Country <chr> "Argentina", "Belize", "Bolivia", "B… $ GDP.PC <int> 20900, 8300, 7500, 15600, 24500, 145… $ GDP.US.bill <dbl> 637.7, 1854.0, 37.1, 2055000.0, 277.… $ GDP.Growth.. <dbl> 2.9, 0.8, 4.2, 1.0, 1.5, 1.8, 3.2, 2… $ Services...GDP <dbl> 60.9, 62.2, 50.0, 72.8, 64.3, 61.4, … $ Creat.Ind...GDP <dbl> 3.8, NA, NA, 2.6, 2.2, 3.3, 2.0, 2.0… $ Inflation <dbl> 25.7, 1.1, 2.8, 3.4, 2.2, 4.3, 1.6, … $ Unemployment <dbl> 8.1, 10.1, 4.0, 11.8, 7.0, 10.5, 8.1… $ X..pop.below.poverty.line <dbl> 25.7, 41.0, 38.6, 4.2, 14.4, 28.0, 2… $ Internet.penetration...population <dbl> 93.1, 52.3, 78.6, 70.7, 77.5, 63.2, … $ Median.age <dbl> 31.7, 22.7, 24.3, 32.0, 34.4, 30.0, … $ X..pop.25.54 <dbl> 39.38, 36.62, 37.48, 43.86, 43.08, 4… $ Education.invest...GDP <dbl> 5.9, 7.4, 7.3, 5.9, 4.9, 4.5, 7.1, 5…
# Listas: Acá se puede menter de todo (vectores, matrices, dataframes, etc)
my_vector <- 1:8
my_vector
my_matrix <-matrix(1:9,ncol=3)
my_matrix
| 1 | 4 | 7 |
| 2 | 5 | 8 |
| 3 | 6 | 9 |
my_df <- mtcars[1:4,] # filas del 1 al 4 y todas las columnas
my_df
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <int> | <dbl> | <int> | <dbl> | <dbl> | <dbl> | <lgl> | <lgl> | <int> | <int> | |
| 1 | Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 | 16.46 | FALSE | TRUE | 4 | 4 |
| 2 | Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 | 17.02 | FALSE | TRUE | 4 | 4 |
| 3 | Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 | 18.61 | TRUE | TRUE | 4 | 1 |
| 4 | Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 | 19.44 | TRUE | FALSE | 3 | 1 |
# Insertamos todo lo anterior en una lista
my_list <- list(my_vector,my_matrix,my_df)
my_list
| 1 | 4 | 7 |
| 2 | 5 | 8 |
| 3 | 6 | 9 |
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <int> | <dbl> | <int> | <dbl> | <dbl> | <dbl> | <lgl> | <lgl> | <int> | <int> | |
| 1 | Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 | 16.46 | FALSE | TRUE | 4 | 4 |
| 2 | Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 | 17.02 | FALSE | TRUE | 4 | 4 |
| 3 | Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 | 18.61 | TRUE | TRUE | 4 | 1 |
| 4 | Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 | 19.44 | TRUE | FALSE | 3 | 1 |
EDA consiste en visualizar los datos antes de enfocarnos en las fórmulas estadísticas.
Recomendación: https://www.youtube.com/watch?v=W1_eCwuYkAI&t=316s
Pueden suceder casos donde datasets distintos muestran los mismos valores estadísticos, pero sus elementos en una gráfica son totalmente diferentes. Es por ello por lo que es importante visualizarlos antes.
Ejemplo:
El cuarteto de Anscombe comprende cuatro conjuntos de datos que tienen las mismas propiedades estadísticas, pero que evidentemente son distintas al inspeccionar sus gráficos respectivos.
Cada conjunto consiste de once puntos (x, y) y fueron construidos por el estadístico F. J. Anscombe. El cuarteto es una demostración de la importancia de mirar gráficamente un conjunto de datos antes de analizarlos.
Existen varios tipos de gráficas para visualizar la información al momento de hacer un EDA:
Gráfica de dispersión: los ejes solamente pueden ser valores numéricos y los puntos no se pueden unir.
Histograma: sirve para ver la distribución de las frecuencias de una variable, nos muestra lo que hay o lo que no hay en una distribución. Orden ascendente en el eje de ordenadas. No es un gráfico de barras. Variables numéricas.
Box plot: nos muestra 5 elementos claves en estadistica como el mínimo, el máximo, el primer cuartil, la mediana y el tercer cuartil.
Los 5 puntos clave en estadística descriptiva se pueden visualizar en el box plot:
KMZ, SHAPE, RASTER.
Para realizar el EDA con una gráfica de dispersion dentro de R debemos utilizar la funcion plot, los argumentos que debemos pasarle son:
La información en el eje X y Y.
xlab: título para el eje x.
ylab: título para el eje y.
main: título de la gráfica.
# Observamos la relación de rendimiento de combustible respecto al numero de cilindros de los autos.
# plot(Dataset$VariableY ~ Dataset$VariableX)
plot(mtcars$mpg ~ mtcars$cyl,
xlab = "cilindros",
ylab = "millas por galón",
main = "Cilindros / Millas por galón"
)
# Observamos la correlación entre caballos de fuerza y distancia recorrida
plot(mtcars$mpg ~ mtcars$hp,
xlab = "caballos de fuerza",
ylab = "millas por galón",
main = "Caballos de fuerza / Millas por galón"
)
# Hay países que invierten en educacion hasta el 7% de su PIB y tienen alto desempleo:
plot(orangeec$Unemployment ~ orangeec$Education.invest...GDP,
xlab = "Inversión en educación [% PIB]",
ylab = "Desempleo",
main = "Desempleo / Inversión en Educación"
)
# Aporte de la Economía Naranja al PIB
plot(orangeec$GDP.PC ~ orangeec$Creat.Ind...GDP,
xlab = "Aporte de Economía Naranja al PIB [% PIB]",
ylab = "PIB",
main = "Aporte de Economía Naranja al PIB [% PIB]/ PIB"
)
Para realizar EDA con un histograma dentro de R debemos utilizar la función hist(), los argumentos que debemos pasar son:
Es necesario contar con el paquete ggplot2
install.packages("ggplot2")
package 'ggplot2' successfully unpacked and MD5 sums checked The downloaded binary packages are in C:\Users\INGENIERO SALINA\AppData\Local\Temp\RtmpGCm48S\downloaded_packages
library(ggplot2) # Para cargar el paquete y dejarlo disponible para su uso luego de instalar la librería correspondiente.
qplot(
mtcars$hp,
geom = "histogram",
xlab = "caballos de fuerza",
main = "Carros según HP",
binwidth = 50
)
Warning message: "`qplot()` was deprecated in ggplot2 3.4.0."
hist(
mtcars$hp,
xlab = "caballos de fuerza",
main = "Carros según HP"
)
ggplot(mtcars, aes(x = hp)) +
geom_histogram(binwidth = 30) +
labs(x = "Caballos de fuerza",
y = "Cantidad de autos",
title = "Hp / Cantidad de Autos") +
theme(legend.position = "none") +
theme(panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
Opciones de ggplot.
ggplot()+
geom_histogram(data=mtcars,
aes(x=hp),
fill="blue",
color="red",
binwidth=20
) +
labs(x = "Caballos de fuerza",
y = "Cantidad de autos",
title = "Hp / Cantidad de Autos") +
xlim(c(80,280))+
theme(legend.position = "none") +
theme(panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()
)
Warning message: "Removed 6 rows containing non-finite values (`stat_bin()`)." Warning message: "Removed 2 rows containing missing values (`geom_bar()`)."
# PIBs
ggplot()+
geom_histogram(data=orangeec,
aes(x=GDP.PC),
fill="blue",
color="red",
binwidth=2000
) +
labs(x = "PIB per cápita",
y = "Cantidad de países",
title = "PIB per cápita en latam") +
theme(legend.position = "none") +
theme(panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()
)
# Observamos como solo 1 país obtiene el 7% del PIB mediante economía naranja.
ggplot()+
geom_histogram(data=orangeec,
aes(x=Creat.Ind...GDP),
fill="blue",
color="red",
binwidth=1
) +
labs(x = "Aporte de Ec.Naranja al PIB",
y = "Cantidad de países",
title = "Contrib de Ec Naranja en LATAM") +
theme(legend.position = "none") +
theme(panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()
)
Warning message: "Removed 6 rows containing non-finite values (`stat_bin()`)."
# Penetración de Internet
ggplot()+
geom_histogram(data=orangeec,
aes(x=Internet.penetration...population),
fill="red",
color="yellow",
binwidth=5
) +
scale_x_continuous(breaks = seq(40, max(100), 5))
+
labs(x = "Penetración de Intenet como porcentaje de la población",
y = "Cantidad de países",
title = "Internet en LATAM") +
theme(legend.position = "none") +
theme(panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()
)
Error in +labs(x = "Penetración de Intenet como porcentaje de la población", : argumento no válido para un operador unitario Traceback:
Para realizar EDA con un box plot dentro de R debemos utilizar la función boxplot, los argumentos que debemos pasarle son:
También podemos usar ggplot2 para crear un Box Plot.
Revisando nuestro DataFrame vemos que un outlier es el Maserati de 335hp (es muy util usar los boxplots para encontrar outliers)
Recordar que para los boxplots siempre se debe cruzar una variable numérica en X y una categórica en Y
Nota: cuando tenemos cajas "achatadas" tenemos datos uniformes y en cajas "alargadas" datos inconsistentes
# bosplot nativo
boxplot(mtcars$hp,
ylab = "Caballos de Fuerza",
main = "Caballos de fuerza de coches mtcars")
## Boxplot con ggplot2
# Dibujamos tres Boxplots con as.factor(cyl) el 4 6 y 8 los toma como etiqueta no como variable
ggplot(mtcars,
aes(x=as.factor(cyl), y=hp, fill=cyl))+
geom_boxplot()+
labs(x="cilindros", y="caballos de fuerza",
title="Caballos de fuerza según cilindros en mtcars")+
theme(legend.position = "none")+
theme(panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
## Boxplot con ggplot2
ggplot(mtcars,
aes(x=as.factor(cyl), y=hp, fill=cyl))+ # Dibujamos tres Boxplots
geom_boxplot(alpha=0.6)+ # modificamos la claridad
labs(x="cilindros", y="caballos de fuerza",
title="Caballos de fuerza según cilindros en mtcars")+
theme(legend.position = "none")+
theme(panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
# Renombrar los valores de la columna "am": true/Manual y false/Automático
# para utilizar el nombre de la etiqueta inferior como un labelEncoding pero inverso).
# la transformación de los labels debe ser con c(1, 0)
# ya que el dataset de mtcars en el campo am nos encontramos con 1 y 0, el comando a ejecutar es:
# mtcars$am <- factor(mtcars$am, levels = c(1, 0), labels = c('Manual', 'Automatico'))
mtcars <- read.csv("./mtcars.csv", header = TRUE)
mtcars$am <- factor(mtcars$am, levels = c(1,0), labels = c("Manual", "Automatico")) # Ajustamos etiquetas en el eje X
ggplot(mtcars,
aes(x=am, y=mpg, fill=am)) +
geom_boxplot() +
labs(x = "Tipo de caja de cambios",
y = "millas por galón",
title = "Millas por galon segun tipo de caja-mtcars") +
theme(legend.position = "none") +
theme(panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
Instalando el paquete Tidyverse no es necesario instalar dplyr y ggplot por separado. Este contiene estos dos paquetes, además de otros requeridos para hacer Data Science.
Libro de R: En estos ejercicios usan tidyverse en una serie de ejercicios.
Libro: https://arcruz0.github.io/libroadp/index.html
Tidyverse es una colección de paquetes diseñados para hacer DataScience. Todos los paquetes comparten una estructura y ‘grámatica’ similar.
Por ejemplo, incluye:
ggplot2: que lo vemos mucho en este curso, pero hay muchas capas adicionales que pueden agregarse.
dplyr: Provee un set de ‘verbos’ como mutate, select, filter, summarize, arrange, group_by, etc; que te permiten manipular y transformar tus datos (agregar nuevas columnas, métricas, eliminar columnas, etc).
readr: para importar bases de datos desde diferentes formatos como csv, tsv, fwf.
stringr: para manejo de cadenas de texto.
Pueden encontrar más detalle en: https://www.tidyverse.org/
## Boxplots Economía Naranja
# obtenemos la media de referencia para crear nuevas variables
economy <- mean(orangeec$GDP.PC) #Promedio
economy
# mutamos (label encoding) el dataset con dplyr, la nueva columna se agrega al final de la tabla
orangeec <- orangeec %>%
mutate(Strong_economy = ifelse(GDP.PC < economy,
"Por debajo promedio pib per cápita",
"Sobre-Arriba promedio pib per cápita"))
orangeec
| Country | GDP.PC | GDP.US.bill | GDP.Growth.. | Services...GDP | Creat.Ind...GDP | Inflation | Unemployment | X..pop.below.poverty.line | Internet.penetration...population | Median.age | X..pop.25.54 | Education.invest...GDP | Strong_economy |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <int> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <chr> |
| Argentina | 20900 | 637.7 | 2.9 | 60.9 | 3.8 | 25.7 | 8.1 | 25.7 | 93.1 | 31.7 | 39.38 | 5.9 | Sobre-Arriba promedio pib per cápita |
| Belize | 8300 | 1854.0 | 0.8 | 62.2 | NA | 1.1 | 10.1 | 41.0 | 52.3 | 22.7 | 36.62 | 7.4 | Por debajo promedio pib per cápita |
| Bolivia | 7500 | 37.1 | 4.2 | 50.0 | NA | 2.8 | 4.0 | 38.6 | 78.6 | 24.3 | 37.48 | 7.3 | Por debajo promedio pib per cápita |
| Brazil | 15600 | 2055000.0 | 1.0 | 72.8 | 2.6 | 3.4 | 11.8 | 4.2 | 70.7 | 32.0 | 43.86 | 5.9 | Sobre-Arriba promedio pib per cápita |
| Chile | 24500 | 277.0 | 1.5 | 64.3 | 2.2 | 2.2 | 7.0 | 14.4 | 77.5 | 34.4 | 43.08 | 4.9 | Sobre-Arriba promedio pib per cápita |
| Colombia | 14500 | 309.2 | 1.8 | 61.4 | 3.3 | 4.3 | 10.5 | 28.0 | 63.2 | 30.0 | 41.91 | 4.5 | Sobre-Arriba promedio pib per cápita |
| Costa Rica | 16900 | 58.1 | 3.2 | 73.5 | 2.0 | 1.6 | 8.1 | 21.7 | 86.7 | 31.3 | 44.03 | 7.1 | Sobre-Arriba promedio pib per cápita |
| Ecuador | 11500 | 102.3 | 2.7 | 56.9 | 2.0 | 0.4 | 4.6 | 21.5 | 79.9 | 27.7 | 39.59 | 5.0 | Por debajo promedio pib per cápita |
| El Salvador | 8900 | 28.0 | 2.4 | 64.9 | NA | 1.0 | 7.0 | 32.7 | 57.7 | 27.1 | 39.23 | 3.5 | Por debajo promedio pib per cápita |
| Guatemala | 8100 | 75.7 | 2.8 | 63.2 | NA | 4.4 | 2.3 | 59.3 | 42.1 | 22.1 | 34.12 | 2.8 | Por debajo promedio pib per cápita |
| Honduras | 5600 | 22.9 | 4.8 | 57.8 | NA | 3.9 | 5.9 | 29.6 | 38.2 | 23.0 | 36.63 | 5.9 | Por debajo promedio pib per cápita |
| Mexico | 19900 | 1149000.0 | 2.0 | 64.0 | 7.4 | 6.0 | 3.6 | 46.2 | 65.0 | 28.3 | 40.81 | 5.3 | Sobre-Arriba promedio pib per cápita |
| Nicaragua | 5800 | 13.7 | 4.9 | 50.8 | NA | 3.9 | 6.5 | 29.6 | 43.0 | 25.7 | 40.24 | 4.5 | Por debajo promedio pib per cápita |
| Panama | 25400 | 61.8 | 5.4 | 82.0 | 6.3 | 0.9 | 5.5 | 23.0 | 69.7 | 29.2 | 40.35 | 3.2 | Sobre-Arriba promedio pib per cápita |
| Paraguay | 9800 | 29.6 | 4.3 | 54.5 | 4.1 | 3.6 | 6.5 | 22.2 | 89.6 | 28.2 | 41.08 | 5.0 | Por debajo promedio pib per cápita |
| Peru | 13300 | 215.2 | 2.5 | 56.8 | 1.5 | 2.8 | 6.7 | 22.7 | 67.6 | 28.0 | 40.19 | 3.8 | Por debajo promedio pib per cápita |
| Uruguay | 22400 | 58.4 | 3.1 | 68.8 | 1.0 | 6.2 | 7.3 | 9.7 | 88.2 | 35.0 | 39.34 | 4.4 | Sobre-Arriba promedio pib per cápita |
# boxplot
ggplot(orangeec,
aes(x=Strong_economy,
y=Creat.Ind...GDP,
fill=Strong_economy))+
geom_boxplot(alpha=0.5)+
labs(x="Tipo de país",
y="Aporte de economía Naranja al pib",
title="Aporte de economía naranja al pib en países latam con alto y bajo pib percapita")+
theme(legend.position = "none")+
theme(panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
Warning message: "Removed 6 rows containing non-finite values (`stat_boxplot()`)."
# Observamos como en los países con mayor Pib tienen índices de mayor penetración de internet siendo el mínimo el 70%.
ggplot(orangeec, aes(x=Strong_economy, y=`Internet.penetration...population`,
fill=Strong_economy))+
geom_boxplot(alpha=0.4)+
labs(x="Tipo de país", y="Penetración de internet(%)",
title = "Penetración de internet en países Latam con
alto y bajo pib per capita")+
theme(legend.position = "none")+
theme(panel.background = element_blank(),panel.grid.major=element_blank(),
panel.grid.minor=element_blank())
# scatterplot mtcars
# relación hp - rendimiento
# gráfica de dispersion (scatterplot) usando ggplot
ggplot(mtcars,
aes(x=hp,y=mpg))+
geom_point()+
labs(x="caballos fuerza",
y="millas por galón",
title="Relación caballos de fuerza y millas po galón")+
theme(legend.position = "none")+
theme(panel.background = element_blank(),
panel.grid.major=element_blank(),
panel.grid.minor=element_blank())
# relación peso - potencia
ggplot(mtcars, aes(wt,hp))+
geom_point()+
labs(x="peso", y="potencia",
title="Relación peso-potencia")+
theme(legend.position = "none")+
theme(panel.background = element_blank(),panel.grid.major=element_blank(),
panel.grid.minor=element_blank())
# gráficas de puntos con 4 variables
# geom_point permite relacionar am con un color distintivo y el número de cilindros con el tamaño del punto en el scatter
# se incluyen las variables am como color y cyl como tamaño de las burbujas
# qsec: tiempo de cuarto de milla
ggplot(mtcars, aes(x=hp,y=qsec))+
geom_point(aes(color=am,size=cyl))+
labs(x="caballos de fuerza",
y="tiempo en 1/4 millas",
title ="caballos-velocidad según cilindros y tipo de transmisión")
## Scatterplots para economía naranja
ggplot(orangeec, aes(x=Internet.penetration...population,y=Creat.Ind...GDP))+
geom_point(aes(color=Strong_economy,size=GDP.Growth..))+
labs(x="Penetracion Internet",
y="Aporte economía naranja PIB",
title ="Internet y aporte economía naranja segun economía y crecimiento PIB ")
Warning message: "Removed 6 rows containing missing values (`geom_point()`)."
## Scatterplots para economía naranja
ggplot(orangeec, aes(x=Internet.penetration...population,y=Creat.Ind...GDP))+
geom_point(aes(color=factor(Strong_economy),size=GDP.Growth..))+
labs(x="Penetracion Internet",
y="Aporte economía naranja PIB",
title ="Internet y aporte economía naranja segun economía y crecimiento PIB ")
Warning message: "Removed 6 rows containing missing values (`geom_point()`)."
## Reto
ggplot(orangeec, aes(Education.invest...GDP,Unemployment))+
geom_point(aes(color=Strong_economy,size=X..pop.below.poverty.line))+
labs(x="Inversion en educacion", y="Desempleo",
title ="Inversion en educacion % GDP - Desempleo")
# Scatterplot interactivo
# Instalamos la librería plotly (también disponible para python y otros lenguajes)
install.packages("plotly")
library("plotly")
## Scatterplot Interactivo
my_graph <- ggplot(orangeec, aes(x=Internet.penetration...population,
y=Creat.Ind...GDP,
label= row.names(orangeec)))+
geom_point(aes(color=Strong_economy))+
labs(x="Penetración de Internet",
y="Aporte de economía naranja al PIB",
title ="Penetración de Internet y aporte de la economía naranja al crecimiento PIB")
my_graph
Warning message: "Removed 6 rows containing missing values (`geom_point()`)."
my_iplot = ggplotly(my_graph)
my_iplot
La función pairs() nos permite cruzar todas las variables del dataset a modo de tabla donde el eje X de una gráfica corresponde a la columna donde se encuentra, y el eje Y a la fila.
En ambas imágenes podemos observar la correlacion de los datos, a diferencia del HeatMap de pandas, matplotlib y seaborn que es numérico, en la diagonal tenemos el nombre de las variables y podemos identificar fácilmente correlaciones positivas, negativas y la tendencia de las mismas.
# Para evitar el error:
# Error in pairs.default(newdata): non-numeric argument to 'pairs'
# Traceback:
# 1. pairs(newdata)
# 2. pairs.default(newdata)
# 3. stop("non-numeric argument to 'pairs'")
numeric_cols <- sapply(mtcars, is.numeric)
pairs(mtcars[, numeric_cols])
# correlación básica
pairs(mtcars[,2:6]) # todas las filas y columnas de la 2 a la 6
# Seleccionando las columnas de interés y creando nuevo subset
library("dplyr")
newdata <- subset(mtcars, select=c(1,6:7,10,11))
numeric_cols <- sapply(newdata, is.numeric)
pairs(newdata[, numeric_cols])
# Seleccionando las columnas de interés y creando nuevo subset
newdata <- subset(mtcars, select=c(2,7:8,10,11,12))
pairs(newdata)
# de manera negativa
newdata <- subset(mtcars[,-c(1,3,4,5,6,9,10)])
pairs(newdata)
# Uso de Pairs y filter
Eficientes <- filter(mtcars, mpg >= 30)
Eficientes
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb |
|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <int> | <dbl> | <int> | <dbl> | <dbl> | <dbl> | <int> | <fct> | <int> | <int> |
| Fiat 128 | 32.4 | 4 | 78.7 | 66 | 4.08 | 2.200 | 19.47 | 1 | Manual | 4 | 1 |
| Honda Civic | 30.4 | 4 | 75.7 | 52 | 4.93 | 1.615 | 18.52 | 1 | Manual | 4 | 2 |
| Toyota Corolla | 33.9 | 4 | 71.1 | 65 | 4.22 | 1.835 | 19.90 | 1 | Manual | 4 | 1 |
| Lotus Europa | 30.4 | 4 | 95.1 | 113 | 3.77 | 1.513 | 16.90 | 1 | Manual | 5 | 2 |
pairs(Eficientes[,2:6])
# Usando str_dect
install.packages("stringr")
library("stringr")
package 'stringr' successfully unpacked and MD5 sums checked The downloaded binary packages are in C:\Users\INGENIERO SALINA\AppData\Local\Temp\RtmpGCm48S\downloaded_packages
# Filtramos todos los autos mercedes usando str_dect
# detecta "merc" en la columna model
merc <- mtcars %>%
filter(str_detect(model, "Merc"))
merc
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb |
|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <int> | <dbl> | <int> | <dbl> | <dbl> | <dbl> | <int> | <fct> | <int> | <int> |
| Merc 240D | 24.4 | 4 | 146.7 | 62 | 3.69 | 3.19 | 20.0 | 1 | Automatico | 4 | 2 |
| Merc 230 | 22.8 | 4 | 140.8 | 95 | 3.92 | 3.15 | 22.9 | 1 | Automatico | 4 | 2 |
| Merc 280 | 19.2 | 6 | 167.6 | 123 | 3.92 | 3.44 | 18.3 | 1 | Automatico | 4 | 4 |
| Merc 280C | 17.8 | 6 | 167.6 | 123 | 3.92 | 3.44 | 18.9 | 1 | Automatico | 4 | 4 |
| Merc 450SE | 16.4 | 8 | 275.8 | 180 | 3.07 | 4.07 | 17.4 | 0 | Automatico | 3 | 3 |
| Merc 450SL | 17.3 | 8 | 275.8 | 180 | 3.07 | 3.73 | 17.6 | 0 | Automatico | 3 | 3 |
| Merc 450SLC | 15.2 | 8 | 275.8 | 180 | 3.07 | 3.78 | 18.0 | 0 | Automatico | 3 | 3 |
pairs(merc[,2:6])
# forma gráfica
pairs(merc[,2:6])
# forma numérica
cor(merc[,2:6])
| mpg | cyl | disp | hp | drat | |
|---|---|---|---|---|---|
| mpg | 1.0000000 | -0.9446257 | -0.8274252 | -0.9372613 | 0.6466996 |
| cyl | -0.9446257 | 1.0000000 | 0.9487621 | 0.9771820 | -0.8257675 |
| disp | -0.8274252 | 0.9487621 | 1.0000000 | 0.9420908 | -0.9583580 |
| hp | -0.9372613 | 0.9771820 | 0.9420908 | 1.0000000 | -0.8107208 |
| drat | 0.6466996 | -0.8257675 | -0.9583580 | -0.8107208 | 1.0000000 |
# forma gráfica
pairs(newdata)
# forma numérica
cor(newdata)
cor(merc[,2:6])
# Ratificamos la correlación de forma numérica de como los vehículos recorren menos millas al aumentar el numero de cilindros.
| mpg | wt | qsec | gear | carb | |
|---|---|---|---|---|---|
| mpg | 1.0000000 | -0.8676594 | 0.4186840 | 0.4802848 | -0.5509251 |
| wt | -0.8676594 | 1.0000000 | -0.1747159 | -0.5832870 | 0.4276059 |
| qsec | 0.4186840 | -0.1747159 | 1.0000000 | -0.2126822 | -0.6562492 |
| gear | 0.4802848 | -0.5832870 | -0.2126822 | 1.0000000 | 0.2740728 |
| carb | -0.5509251 | 0.4276059 | -0.6562492 | 0.2740728 | 1.0000000 |
| mpg | cyl | disp | hp | drat | |
|---|---|---|---|---|---|
| mpg | 1.0000000 | -0.9446257 | -0.8274252 | -0.9372613 | 0.6466996 |
| cyl | -0.9446257 | 1.0000000 | 0.9487621 | 0.9771820 | -0.8257675 |
| disp | -0.8274252 | 0.9487621 | 1.0000000 | 0.9420908 | -0.9583580 |
| hp | -0.9372613 | 0.9771820 | 0.9420908 | 1.0000000 | -0.8107208 |
| drat | 0.6466996 | -0.8257675 | -0.9583580 | -0.8107208 | 1.0000000 |
Revisamos la correlación del Aporte de la economía naranja respecto a las otras variables.
cor(orangeec[, c(2, 11)])
pairs(orangeec[, c(2, 11)])
ggplot(orangeec, aes(x= GDP.PC, y= Median.age, colour="blue", label=Country))+
geom_point() +geom_text(aes(label=Country),hjust=0, vjust=0)+
theme(legend.position = "none")+
theme(panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
| GDP.PC | Median.age | |
|---|---|---|
| GDP.PC | 1.0000000 | 0.8193096 |
| Median.age | 0.8193096 | 1.0000000 |
pairs(orangeec[,2:6])
newdata <- subset(orangeec, select=c(5,6,10,11,12,13))
pairs(newdata)
Observamos los valores NA en algunas variables, pero necesitamos números en todas las celdas, esto lo solucionamos pasando use="complete.obs" como parámetro adicional a cor.
cor(orangeec[,2:6])
| GDP.PC | GDP.US.bill | GDP.Growth.. | Services...GDP | Creat.Ind...GDP | |
|---|---|---|---|---|---|
| GDP.PC | 1.0000000 | 0.1680323 | -0.1611431 | 0.6733943 | NA |
| GDP.US.bill | 0.1680323 | 1.0000000 | -0.4213369 | 0.3039234 | NA |
| GDP.Growth.. | -0.1611431 | -0.4213369 | 1.0000000 | -0.1430906 | NA |
| Services...GDP | 0.6733943 | 0.3039234 | -0.1430906 | 1.0000000 | NA |
| Creat.Ind...GDP | NA | NA | NA | NA | 1 |
cor(orangeec[,2:6],use="complete.obs") # usar solo las observaciones que estén completas
| GDP.PC | GDP.US.bill | GDP.Growth.. | Services...GDP | Creat.Ind...GDP | |
|---|---|---|---|---|---|
| GDP.PC | 1.00000000 | -0.04987362 | 0.1186869 | 0.6437520 | 0.2606328 |
| GDP.US.bill | -0.04987362 | 1.00000000 | -0.5254890 | 0.2552986 | 0.2421848 |
| GDP.Growth.. | 0.11868685 | -0.52548898 | 1.0000000 | 0.2552048 | 0.3124484 |
| Services...GDP | 0.64375196 | 0.25529859 | 0.2552048 | 1.0000000 | 0.2201699 |
| Creat.Ind...GDP | 0.26063277 | 0.24218479 | 0.3124484 | 0.2201699 | 1.0000000 |
Corroboramos que el insight entre Services % GDP y GDP PC.
Observamos como la parte gráfica nos indica algunas correlaciones que aparentemente son negativas o positivas pero la parte matemática nos permite identificar el grado en que alguna de ellas no sigue la tendencia esperada.
cor(orangeec[,5:10],use="complete.obs")
| Services...GDP | Creat.Ind...GDP | Inflation | Unemployment | X..pop.below.poverty.line | Internet.penetration...population | |
|---|---|---|---|---|---|---|
| Services...GDP | 1.0000000 | 0.2201699 | -0.1985176 | 0.17703222 | -0.2534107 | -0.14530602 |
| Creat.Ind...GDP | 0.2201699 | 1.0000000 | 0.1189514 | -0.41885405 | 0.7072581 | -0.34351645 |
| Inflation | -0.1985176 | 0.1189514 | 1.0000000 | 0.14179995 | 0.1702550 | 0.44593550 |
| Unemployment | 0.1770322 | -0.4188541 | 0.1418000 | 1.00000000 | -0.5693572 | -0.02534538 |
| X..pop.below.poverty.line | -0.2534107 | 0.7072581 | 0.1702550 | -0.56935718 | 1.0000000 | -0.30802896 |
| Internet.penetration...population | -0.1453060 | -0.3435164 | 0.4459355 | -0.02534538 | -0.3080290 | 1.00000000 |
Conceptos:
(útil para determinar las probabilidades de que un evento ocurra).
Podremos encontrar casos donde dos grupos de datos distintos tengan el mismo promedio, pero sus datos son muy diferentes uno del otro. No es lo mismo un grupo de datos donde su desviación es menor a 1, que aquel donde sus datos tienen una desviación de 4 o 6 puntos.
Ejemplo:
Los datos están muy desviados del promedio, pero como sabemos que tanto es bueno, malo, mucho o poco? para ello usamos el coeficiente de variación
Coeficiente de variación: este expresa la desviación estándar como porcentaje de la media, mostrando una mejor interpretación porcentual del grado de variabilidad que la desviación estándar (que tanto estamos alejados del promedio).
La formula del coeficiente de variación es:
Si el coeficiente es mayor al 25% entonces los datos no son homogéneos, varían mucho, si es menor podemos tomar la decision por promedio.
Dentro de R podemos sacar la desviación estándar con la función sd() y el promedio con mean().
# promedio de millas por galón
prom <- mean(mtcars$mpg)
prom
# desviacion estándar
desv <- sd(mtcars$mpg)
desv
## calculamos el coeficiente
CoefVar <- (desv/prom)*100
CoefVar
maximo <- max(mtcars$mpg)
maximo
minimo <- min(mtcars$mpg)
minimo
Vamos a ver que tanto están desviados nuestros datos del promedio en el dataset de Economía naranja.
Al momento de sacar el promedio de nuestro dataset orangeec encontramos variables que tienen valores NA, para que estos no afecten nuestro cálculo solamente debemos añadir como argumento na.rm=TRUE.
El eliminar los NA del dataset puede ser contraproducente y puede generar Sesgo. En los entornos productivos es mejor aplicar técnicas de imputación de datos y esa directriz nos la puede dar la industria. Por ejemplo una técnica de imputación es remplazar los valores NA por el valor promedio de la variable, otro ejemplo es remplazar los NA por el valor que más se repite en la variable.
summary(orangeec)
# promedio
prom <- mean(orangeec$Internet.penetration...population)
prom
# desviacion estándar
desv <- sd(orangeec$Internet.penetration...population)
desv
## calculamos el coeficiente de desviación
CoefVar <- (desv/prom)*100
CoefVar
Country GDP.PC GDP.US.bill GDP.Growth..
Length:17 Min. : 5600 Min. : 13.7 Min. :0.800
Class :character 1st Qu.: 8300 1st Qu.: 37.1 1st Qu.:2.000
Mode :character Median :13300 Median : 75.7 Median :2.800
Mean :14053 Mean : 188693.0 Mean :2.959
3rd Qu.:19900 3rd Qu.: 309.2 3rd Qu.:4.200
Max. :25400 Max. :2055000.0 Max. :5.400
Services...GDP Creat.Ind...GDP Inflation Unemployment
Min. :50.00 Min. :1.000 Min. : 0.400 Min. : 2.300
1st Qu.:56.90 1st Qu.:2.000 1st Qu.: 1.600 1st Qu.: 5.500
Median :62.20 Median :2.600 Median : 3.400 Median : 6.700
Mean :62.64 Mean :3.291 Mean : 4.365 Mean : 6.794
3rd Qu.:64.90 3rd Qu.:3.950 3rd Qu.: 4.300 3rd Qu.: 8.100
Max. :82.00 Max. :7.400 Max. :25.700 Max. :11.800
NA's :6
X..pop.below.poverty.line Internet.penetration...population Median.age
Min. : 4.20 Min. :38.20 Min. :22.10
1st Qu.:21.70 1st Qu.:57.70 1st Qu.:25.70
Median :25.70 Median :69.70 Median :28.20
Mean :27.65 Mean :68.42 Mean :28.28
3rd Qu.:32.70 3rd Qu.:79.90 3rd Qu.:31.30
Max. :59.30 Max. :93.10 Max. :35.00
X..pop.25.54 Education.invest...GDP Strong_economy
Min. :34.12 Min. :2.800 Length:17
1st Qu.:39.23 1st Qu.:4.400 Class :character
Median :40.19 Median :5.000 Mode :character
Mean :39.88 Mean :5.082
3rd Qu.:41.08 3rd Qu.:5.900
Max. :44.03 Max. :7.400
# Eliminando los NA's para hacer los cálculos.
# Usando Creative Industries GDP
# Observamos al correr summary que tenemos 6 NA (missing values)
# Observamos una desviacion del 61%
# Para este ejemplo en especifico el promedio esta alejado de los datos,
# es mejor apoyarnos en la mediana o en los quartiles y no en el promedio.
# promedio
prom <- mean(orangeec$Creat.Ind...GDP)
prom
# desviacion estándar
desv <- sd(orangeec$Creat.Ind...GDP)
desv
## calculamos el coeficiente de desviación
CoefVar <- (desv/prom)*100
CoefVar
#--------------------------------------------------------------- na.rm = TRUE
# promedio
prom <- mean(orangeec$Creat.Ind...GDP, na.rm=TRUE)
prom
# desviacion estándar
desv <- sd(orangeec$Creat.Ind...GDP, na.rm=TRUE)
desv
## calculamos el coeficiente de desviación
CoefVar <- (desv/prom)*100
CoefVar
### Clase 30 Generando tablas, filtrando y seleccionando datos - dplyr-Parte 1
mtcars <- read.csv("./mtcars.csv", header = TRUE)
# Promedio de millas por galón
eficientes <- mean(mtcars$mpg)
eficientes
mtcars <- mtcars %>%
mutate(Mas_eficientes=ifelse(mpg<eficientes,
"bajo promedio",
"en o sobre promedio"))
columnas_deseadas <- subset(mtcars, select = c(model, mpg, Mas_eficientes))
head(columnas_deseadas)
| model | mpg | Mas_eficientes | |
|---|---|---|---|
| <chr> | <dbl> | <chr> | |
| 1 | Mazda RX4 | 21.0 | en o sobre promedio |
| 2 | Mazda RX4 Wag | 21.0 | en o sobre promedio |
| 3 | Datsun 710 | 22.8 | en o sobre promedio |
| 4 | Hornet 4 Drive | 21.4 | en o sobre promedio |
| 5 | Hornet Sportabout | 18.7 | bajo promedio |
| 6 | Valiant | 18.1 | bajo promedio |
# Agregando mas veloces
Mas_veloces <- mtcars[mtcars$qsec<16,]
Mas_veloces
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | Mas_eficientes | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <int> | <dbl> | <int> | <dbl> | <dbl> | <dbl> | <int> | <int> | <int> | <int> | <chr> | |
| 7 | Duster 360 | 14.3 | 8 | 360 | 245 | 3.21 | 3.57 | 15.84 | 0 | 0 | 3 | 4 | bajo promedio |
| 24 | Camaro Z28 | 13.3 | 8 | 350 | 245 | 3.73 | 3.84 | 15.41 | 0 | 0 | 3 | 4 | bajo promedio |
| 29 | Ford Pantera L | 15.8 | 8 | 351 | 264 | 4.22 | 3.17 | 14.50 | 0 | 1 | 5 | 4 | bajo promedio |
| 30 | Ferrari Dino | 19.7 | 6 | 145 | 175 | 3.62 | 2.77 | 15.50 | 0 | 1 | 5 | 6 | bajo promedio |
| 31 | Maserati Bora | 15.0 | 8 | 301 | 335 | 3.54 | 3.57 | 14.60 | 0 | 1 | 5 | 8 | bajo promedio |
mtcars <- mtcars %>%
mutate(Velocidad_cuarto_milla=ifelse(qsec < 16,
"Menos 16 segundos",
"Mas de 16 segundos"))
# Cambiamos peso a kilos
mtcars <- mtcars %>%
mutate(Peso_kilos=(wt/2)*1000)
#
mtcars <- mtcars %>%
mutate(Peso=ifelse(Peso_kilos <= 1500,
"Livianos",
"Pesados"))
head(mtcars)
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | Mas_eficientes | Velocidad_cuarto_milla | Peso_kilos | Peso | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <int> | <dbl> | <int> | <dbl> | <dbl> | <dbl> | <int> | <int> | <int> | <int> | <chr> | <chr> | <dbl> | <chr> | |
| 1 | Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 | en o sobre promedio | Mas de 16 segundos | 1310.0 | Livianos |
| 2 | Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 | en o sobre promedio | Mas de 16 segundos | 1437.5 | Livianos |
| 3 | Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 | 18.61 | 1 | 1 | 4 | 1 | en o sobre promedio | Mas de 16 segundos | 1160.0 | Livianos |
| 4 | Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 | en o sobre promedio | Mas de 16 segundos | 1607.5 | Pesados |
| 5 | Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 | bajo promedio | Mas de 16 segundos | 1720.0 | Pesados |
| 6 | Valiant | 18.1 | 6 | 225 | 105 | 2.76 | 3.460 | 20.22 | 1 | 0 | 3 | 1 | bajo promedio | Mas de 16 segundos | 1730.0 | Pesados |
# Creando nuevas variables
# Con mutate creamos nuevas columnas y sus variables correspondientes fila a fila
orangeec <- orangeec %>%
mutate(Crecimiento_GPD = ifelse(GDP.Growth.. >= 2.5,
"2.5% o más",
"Menos 2.5"))
orangeec <- orangeec %>%
mutate(Anaranjados = ifelse(Creat.Ind...GDP >= 2.5,
"Mas anaranjados",
"Menos anaranjados"))
orangeec %>%
arrange(desc(Creat.Ind...GDP))
| Country | GDP.PC | GDP.US.bill | GDP.Growth.. | Services...GDP | Creat.Ind...GDP | Inflation | Unemployment | X..pop.below.poverty.line | Internet.penetration...population | Median.age | X..pop.25.54 | Education.invest...GDP | Strong_economy | Crecimiento_GPD | Anaranjados |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <int> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <chr> | <chr> | <chr> |
| Mexico | 19900 | 1149000.0 | 2.0 | 64.0 | 7.4 | 6.0 | 3.6 | 46.2 | 65.0 | 28.3 | 40.81 | 5.3 | Sobre-Arriba promedio pib per cápita | Menos 2.5 | Mas anaranjados |
| Panama | 25400 | 61.8 | 5.4 | 82.0 | 6.3 | 0.9 | 5.5 | 23.0 | 69.7 | 29.2 | 40.35 | 3.2 | Sobre-Arriba promedio pib per cápita | 2.5% o más | Mas anaranjados |
| Paraguay | 9800 | 29.6 | 4.3 | 54.5 | 4.1 | 3.6 | 6.5 | 22.2 | 89.6 | 28.2 | 41.08 | 5.0 | Por debajo promedio pib per cápita | 2.5% o más | Mas anaranjados |
| Argentina | 20900 | 637.7 | 2.9 | 60.9 | 3.8 | 25.7 | 8.1 | 25.7 | 93.1 | 31.7 | 39.38 | 5.9 | Sobre-Arriba promedio pib per cápita | 2.5% o más | Mas anaranjados |
| Colombia | 14500 | 309.2 | 1.8 | 61.4 | 3.3 | 4.3 | 10.5 | 28.0 | 63.2 | 30.0 | 41.91 | 4.5 | Sobre-Arriba promedio pib per cápita | Menos 2.5 | Mas anaranjados |
| Brazil | 15600 | 2055000.0 | 1.0 | 72.8 | 2.6 | 3.4 | 11.8 | 4.2 | 70.7 | 32.0 | 43.86 | 5.9 | Sobre-Arriba promedio pib per cápita | Menos 2.5 | Mas anaranjados |
| Chile | 24500 | 277.0 | 1.5 | 64.3 | 2.2 | 2.2 | 7.0 | 14.4 | 77.5 | 34.4 | 43.08 | 4.9 | Sobre-Arriba promedio pib per cápita | Menos 2.5 | Menos anaranjados |
| Costa Rica | 16900 | 58.1 | 3.2 | 73.5 | 2.0 | 1.6 | 8.1 | 21.7 | 86.7 | 31.3 | 44.03 | 7.1 | Sobre-Arriba promedio pib per cápita | 2.5% o más | Menos anaranjados |
| Ecuador | 11500 | 102.3 | 2.7 | 56.9 | 2.0 | 0.4 | 4.6 | 21.5 | 79.9 | 27.7 | 39.59 | 5.0 | Por debajo promedio pib per cápita | 2.5% o más | Menos anaranjados |
| Peru | 13300 | 215.2 | 2.5 | 56.8 | 1.5 | 2.8 | 6.7 | 22.7 | 67.6 | 28.0 | 40.19 | 3.8 | Por debajo promedio pib per cápita | 2.5% o más | Menos anaranjados |
| Uruguay | 22400 | 58.4 | 3.1 | 68.8 | 1.0 | 6.2 | 7.3 | 9.7 | 88.2 | 35.0 | 39.34 | 4.4 | Sobre-Arriba promedio pib per cápita | 2.5% o más | Menos anaranjados |
| Belize | 8300 | 1854.0 | 0.8 | 62.2 | NA | 1.1 | 10.1 | 41.0 | 52.3 | 22.7 | 36.62 | 7.4 | Por debajo promedio pib per cápita | Menos 2.5 | NA |
| Bolivia | 7500 | 37.1 | 4.2 | 50.0 | NA | 2.8 | 4.0 | 38.6 | 78.6 | 24.3 | 37.48 | 7.3 | Por debajo promedio pib per cápita | 2.5% o más | NA |
| El Salvador | 8900 | 28.0 | 2.4 | 64.9 | NA | 1.0 | 7.0 | 32.7 | 57.7 | 27.1 | 39.23 | 3.5 | Por debajo promedio pib per cápita | Menos 2.5 | NA |
| Guatemala | 8100 | 75.7 | 2.8 | 63.2 | NA | 4.4 | 2.3 | 59.3 | 42.1 | 22.1 | 34.12 | 2.8 | Por debajo promedio pib per cápita | 2.5% o más | NA |
| Honduras | 5600 | 22.9 | 4.8 | 57.8 | NA | 3.9 | 5.9 | 29.6 | 38.2 | 23.0 | 36.63 | 5.9 | Por debajo promedio pib per cápita | 2.5% o más | NA |
| Nicaragua | 5800 | 13.7 | 4.9 | 50.8 | NA | 3.9 | 6.5 | 29.6 | 43.0 | 25.7 | 40.24 | 4.5 | Por debajo promedio pib per cápita | 2.5% o más | NA |
TopNaranjas <- orangeec %>%
filter(Country %in% c("Mexico", "Panama", "Argentina","Colombia", "Brazil"))
TopNaranjas
| Country | GDP.PC | GDP.US.bill | GDP.Growth.. | Services...GDP | Creat.Ind...GDP | Inflation | Unemployment | X..pop.below.poverty.line | Internet.penetration...population | Median.age | X..pop.25.54 | Education.invest...GDP | Strong_economy | Crecimiento_GPD | Anaranjados |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <int> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <chr> | <chr> | <chr> |
| Argentina | 20900 | 637.7 | 2.9 | 60.9 | 3.8 | 25.7 | 8.1 | 25.7 | 93.1 | 31.7 | 39.38 | 5.9 | Sobre-Arriba promedio pib per cápita | 2.5% o más | Mas anaranjados |
| Brazil | 15600 | 2055000.0 | 1.0 | 72.8 | 2.6 | 3.4 | 11.8 | 4.2 | 70.7 | 32.0 | 43.86 | 5.9 | Sobre-Arriba promedio pib per cápita | Menos 2.5 | Mas anaranjados |
| Colombia | 14500 | 309.2 | 1.8 | 61.4 | 3.3 | 4.3 | 10.5 | 28.0 | 63.2 | 30.0 | 41.91 | 4.5 | Sobre-Arriba promedio pib per cápita | Menos 2.5 | Mas anaranjados |
| Mexico | 19900 | 1149000.0 | 2.0 | 64.0 | 7.4 | 6.0 | 3.6 | 46.2 | 65.0 | 28.3 | 40.81 | 5.3 | Sobre-Arriba promedio pib per cápita | Menos 2.5 | Mas anaranjados |
| Panama | 25400 | 61.8 | 5.4 | 82.0 | 6.3 | 0.9 | 5.5 | 23.0 | 69.7 | 29.2 | 40.35 | 3.2 | Sobre-Arriba promedio pib per cápita | 2.5% o más | Mas anaranjados |
Vamos a hacer un scatterplot de mtcars con 3 variables, con los ajustes que hemos hecho y algunos adicionales.
A traves de facet wrap podemos separar nuestra gráfica en varios cuadrantes, nuestro dataset "mas_pesados" en este caso tiene 4 modelos, por lo cual genera 4 gráficas donde podemos visualizar ahora 3 variables, los modelos, los mpg y los hp para cada vehículo.
# Ranking
mtcars %>%
arrange(desc(Peso_kilos))
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | Mas_eficientes | Velocidad_cuarto_milla | Peso_kilos | Peso |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <int> | <dbl> | <int> | <dbl> | <dbl> | <dbl> | <int> | <int> | <int> | <int> | <chr> | <chr> | <dbl> | <chr> |
| Lincoln Continental | 10.4 | 8 | 460.0 | 215 | 3.00 | 5.424 | 17.82 | 0 | 0 | 3 | 4 | bajo promedio | Mas de 16 segundos | 2712.0 | Pesados |
| Chrysler Imperial | 14.7 | 8 | 440.0 | 230 | 3.23 | 5.345 | 17.42 | 0 | 0 | 3 | 4 | bajo promedio | Mas de 16 segundos | 2672.5 | Pesados |
| Cadillac Fleetwood | 10.4 | 8 | 472.0 | 205 | 2.93 | 5.250 | 17.98 | 0 | 0 | 3 | 4 | bajo promedio | Mas de 16 segundos | 2625.0 | Pesados |
| Merc 450SE | 16.4 | 8 | 275.8 | 180 | 3.07 | 4.070 | 17.40 | 0 | 0 | 3 | 3 | bajo promedio | Mas de 16 segundos | 2035.0 | Pesados |
| Pontiac Firebird | 19.2 | 8 | 400.0 | 175 | 3.08 | 3.845 | 17.05 | 0 | 0 | 3 | 2 | bajo promedio | Mas de 16 segundos | 1922.5 | Pesados |
| Camaro Z28 | 13.3 | 8 | 350.0 | 245 | 3.73 | 3.840 | 15.41 | 0 | 0 | 3 | 4 | bajo promedio | Menos 16 segundos | 1920.0 | Pesados |
| Merc 450SLC | 15.2 | 8 | 275.8 | 180 | 3.07 | 3.780 | 18.00 | 0 | 0 | 3 | 3 | bajo promedio | Mas de 16 segundos | 1890.0 | Pesados |
| Merc 450SL | 17.3 | 8 | 275.8 | 180 | 3.07 | 3.730 | 17.60 | 0 | 0 | 3 | 3 | bajo promedio | Mas de 16 segundos | 1865.0 | Pesados |
| Duster 360 | 14.3 | 8 | 360.0 | 245 | 3.21 | 3.570 | 15.84 | 0 | 0 | 3 | 4 | bajo promedio | Menos 16 segundos | 1785.0 | Pesados |
| Maserati Bora | 15.0 | 8 | 301.0 | 335 | 3.54 | 3.570 | 14.60 | 0 | 1 | 5 | 8 | bajo promedio | Menos 16 segundos | 1785.0 | Pesados |
| Dodge Challenger | 15.5 | 8 | 318.0 | 150 | 2.76 | 3.520 | 16.87 | 0 | 0 | 3 | 2 | bajo promedio | Mas de 16 segundos | 1760.0 | Pesados |
| Valiant | 18.1 | 6 | 225.0 | 105 | 2.76 | 3.460 | 20.22 | 1 | 0 | 3 | 1 | bajo promedio | Mas de 16 segundos | 1730.0 | Pesados |
| Hornet Sportabout | 18.7 | 8 | 360.0 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 | bajo promedio | Mas de 16 segundos | 1720.0 | Pesados |
| Merc 280 | 19.2 | 6 | 167.6 | 123 | 3.92 | 3.440 | 18.30 | 1 | 0 | 4 | 4 | bajo promedio | Mas de 16 segundos | 1720.0 | Pesados |
| Merc 280C | 17.8 | 6 | 167.6 | 123 | 3.92 | 3.440 | 18.90 | 1 | 0 | 4 | 4 | bajo promedio | Mas de 16 segundos | 1720.0 | Pesados |
| AMC Javelin | 15.2 | 8 | 304.0 | 150 | 3.15 | 3.435 | 17.30 | 0 | 0 | 3 | 2 | bajo promedio | Mas de 16 segundos | 1717.5 | Pesados |
| Hornet 4 Drive | 21.4 | 6 | 258.0 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 | en o sobre promedio | Mas de 16 segundos | 1607.5 | Pesados |
| Merc 240D | 24.4 | 4 | 146.7 | 62 | 3.69 | 3.190 | 20.00 | 1 | 0 | 4 | 2 | en o sobre promedio | Mas de 16 segundos | 1595.0 | Pesados |
| Ford Pantera L | 15.8 | 8 | 351.0 | 264 | 4.22 | 3.170 | 14.50 | 0 | 1 | 5 | 4 | bajo promedio | Menos 16 segundos | 1585.0 | Pesados |
| Merc 230 | 22.8 | 4 | 140.8 | 95 | 3.92 | 3.150 | 22.90 | 1 | 0 | 4 | 2 | en o sobre promedio | Mas de 16 segundos | 1575.0 | Pesados |
| Mazda RX4 Wag | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 | en o sobre promedio | Mas de 16 segundos | 1437.5 | Livianos |
| Volvo 142E | 21.4 | 4 | 121.0 | 109 | 4.11 | 2.780 | 18.60 | 1 | 1 | 4 | 2 | en o sobre promedio | Mas de 16 segundos | 1390.0 | Livianos |
| Ferrari Dino | 19.7 | 6 | 145.0 | 175 | 3.62 | 2.770 | 15.50 | 0 | 1 | 5 | 6 | bajo promedio | Menos 16 segundos | 1385.0 | Livianos |
| Mazda RX4 | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 | en o sobre promedio | Mas de 16 segundos | 1310.0 | Livianos |
| Toyota Corona | 21.5 | 4 | 120.1 | 97 | 3.70 | 2.465 | 20.01 | 1 | 0 | 3 | 1 | en o sobre promedio | Mas de 16 segundos | 1232.5 | Livianos |
| Datsun 710 | 22.8 | 4 | 108.0 | 93 | 3.85 | 2.320 | 18.61 | 1 | 1 | 4 | 1 | en o sobre promedio | Mas de 16 segundos | 1160.0 | Livianos |
| Fiat 128 | 32.4 | 4 | 78.7 | 66 | 4.08 | 2.200 | 19.47 | 1 | 1 | 4 | 1 | en o sobre promedio | Mas de 16 segundos | 1100.0 | Livianos |
| Porsche 914-2 | 26.0 | 4 | 120.3 | 91 | 4.43 | 2.140 | 16.70 | 0 | 1 | 5 | 2 | en o sobre promedio | Mas de 16 segundos | 1070.0 | Livianos |
| Fiat X1-9 | 27.3 | 4 | 79.0 | 66 | 4.08 | 1.935 | 18.90 | 1 | 1 | 4 | 1 | en o sobre promedio | Mas de 16 segundos | 967.5 | Livianos |
| Toyota Corolla | 33.9 | 4 | 71.1 | 65 | 4.22 | 1.835 | 19.90 | 1 | 1 | 4 | 1 | en o sobre promedio | Mas de 16 segundos | 917.5 | Livianos |
| Honda Civic | 30.4 | 4 | 75.7 | 52 | 4.93 | 1.615 | 18.52 | 1 | 1 | 4 | 2 | en o sobre promedio | Mas de 16 segundos | 807.5 | Livianos |
| Lotus Europa | 30.4 | 4 | 95.1 | 113 | 3.77 | 1.513 | 16.90 | 1 | 1 | 5 | 2 | en o sobre promedio | Mas de 16 segundos | 756.5 | Livianos |
# Los ordeno
mtcars_orderby_pesados<-mtcars %>% arrange(desc(Peso_kilos))
# Hago un filter de los 4 primeros
Mas_pesados <- filter(mtcars_orderby_pesados[1:4,])
Mas_pesados
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | Mas_eficientes | Velocidad_cuarto_milla | Peso_kilos | Peso |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <int> | <dbl> | <int> | <dbl> | <dbl> | <dbl> | <int> | <int> | <int> | <int> | <chr> | <chr> | <dbl> | <chr> |
| Lincoln Continental | 10.4 | 8 | 460.0 | 215 | 3.00 | 5.424 | 17.82 | 0 | 0 | 3 | 4 | bajo promedio | Mas de 16 segundos | 2712.0 | Pesados |
| Chrysler Imperial | 14.7 | 8 | 440.0 | 230 | 3.23 | 5.345 | 17.42 | 0 | 0 | 3 | 4 | bajo promedio | Mas de 16 segundos | 2672.5 | Pesados |
| Cadillac Fleetwood | 10.4 | 8 | 472.0 | 205 | 2.93 | 5.250 | 17.98 | 0 | 0 | 3 | 4 | bajo promedio | Mas de 16 segundos | 2625.0 | Pesados |
| Merc 450SE | 16.4 | 8 | 275.8 | 180 | 3.07 | 4.070 | 17.40 | 0 | 0 | 3 | 3 | bajo promedio | Mas de 16 segundos | 2035.0 | Pesados |
# Vemos el efecto de las transformaciones graficando
ggplot(Mas_pesados,
aes(x=hp,y=mpg))+
geom_point()+
facet_wrap(~model)
#facet_wrap dibuja un cuadrante para cada modelo
Vamos a visualizar los países que mas aportan al pib desde su economía naranja.
Podemos observar la penetración de internet y el porcentaje de aporte de los servicios del país a su PIB
# Instalamos RCOLORBREWER para mejorar las visualizaciones:
install.packages("RColorBrewer")
library(RColorBrewer) # No solo hay que instalarla, tambiém hay que activar la librería
package 'RColorBrewer' successfully unpacked and MD5 sums checked The downloaded binary packages are in C:\Users\INGENIERO SALINA\AppData\Local\Temp\RtmpGCm48S\downloaded_packages
# Agregamos Paraguay
TopNaranjas <- orangeec %>%
filter(Country %in% c("Mexico", "Panama", "Argentina","Colombia", "Brazil","Paraguay"))
TopNaranjas
| Country | GDP.PC | GDP.US.bill | GDP.Growth.. | Services...GDP | Creat.Ind...GDP | Inflation | Unemployment | X..pop.below.poverty.line | Internet.penetration...population | Median.age | X..pop.25.54 | Education.invest...GDP | Strong_economy | Crecimiento_GPD | Anaranjados |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <int> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <chr> | <chr> | <chr> |
| Argentina | 20900 | 637.7 | 2.9 | 60.9 | 3.8 | 25.7 | 8.1 | 25.7 | 93.1 | 31.7 | 39.38 | 5.9 | Sobre-Arriba promedio pib per cápita | 2.5% o más | Mas anaranjados |
| Brazil | 15600 | 2055000.0 | 1.0 | 72.8 | 2.6 | 3.4 | 11.8 | 4.2 | 70.7 | 32.0 | 43.86 | 5.9 | Sobre-Arriba promedio pib per cápita | Menos 2.5 | Mas anaranjados |
| Colombia | 14500 | 309.2 | 1.8 | 61.4 | 3.3 | 4.3 | 10.5 | 28.0 | 63.2 | 30.0 | 41.91 | 4.5 | Sobre-Arriba promedio pib per cápita | Menos 2.5 | Mas anaranjados |
| Mexico | 19900 | 1149000.0 | 2.0 | 64.0 | 7.4 | 6.0 | 3.6 | 46.2 | 65.0 | 28.3 | 40.81 | 5.3 | Sobre-Arriba promedio pib per cápita | Menos 2.5 | Mas anaranjados |
| Panama | 25400 | 61.8 | 5.4 | 82.0 | 6.3 | 0.9 | 5.5 | 23.0 | 69.7 | 29.2 | 40.35 | 3.2 | Sobre-Arriba promedio pib per cápita | 2.5% o más | Mas anaranjados |
| Paraguay | 9800 | 29.6 | 4.3 | 54.5 | 4.1 | 3.6 | 6.5 | 22.2 | 89.6 | 28.2 | 41.08 | 5.0 | Por debajo promedio pib per cápita | 2.5% o más | Mas anaranjados |
# Viendo más información con facet wrap - Parte 2 Economía Naranja
ggplot(TopNaranjas, aes(x=Internet.penetration...population,
y=Services...GDP, size=GDP.PC))+
geom_point()+
facet_wrap(~Country)
# Aporte industrias creativas al PIB
ggplot(TopNaranjas,
aes(x=Education.invest...GDP,
y=Creat.Ind...GDP,
size=Unemployment))+
geom_point()+
facet_wrap(~Country)
#RColorBrewer
myColors <- brewer.pal(9,"Reds")
ggplot(TopNaranjas,
aes(x=Internet.penetration...population,
y=GDP.PC,
fill=Creat.Ind...GDP))+
geom_tile()+
facet_wrap(~Country)+
scale_fill_gradientn(colors=myColors)
Para generar nuestro documento con todas las gráficas y observaciones que hemos realizado a nuestro dataset, para ello necesitamos instalar el paquete rmarkdown y knitr:
R Markdown nos permite generar archivos en formato HTML, PDF y Word. La mejor opción es trabajar en un formato HTML para compartirlo por internet y posteriormente convertirlo ya a PDF o Word.
install.packages("rmarkdown")
install.packages("knitr")
package 'rmarkdown' successfully unpacked and MD5 sums checked The downloaded binary packages are in C:\Users\INGENIERO SALINA\AppData\Local\Temp\RtmpGCm48S\downloaded_packages package 'knitr' successfully unpacked and MD5 sums checked The downloaded binary packages are in C:\Users\INGENIERO SALINA\AppData\Local\Temp\RtmpGCm48S\downloaded_packages
library(rmarkdown) # No solo hay que instalarla, tambiém hay que activar la librería
library(knitr) # No solo hay que instalarla, tambiém hay que activar la librería
Configuramos nuestro archivo y damos click en knit, lo guardamos como "economia_naranja.rmd"
Conforme agregamos chunks de código podemos ir dando click en knit o ctrl + shift + k para ir actualizando el archivo, podemos publicar o exportar este archivo.
Title: "Economia Naranja" Author: "Rusbel Bermudez" Date: "September 17, 2020" output: html_document
orangeec <- read.csv("./orangeec.csv", header = TRUE)
summary(orangeec)
Country GDP.PC GDP.US.bill GDP.Growth..
Length:17 Min. : 5600 Min. : 13.7 Min. :0.800
Class :character 1st Qu.: 8300 1st Qu.: 37.1 1st Qu.:2.000
Mode :character Median :13300 Median : 75.7 Median :2.800
Mean :14053 Mean : 188693.0 Mean :2.959
3rd Qu.:19900 3rd Qu.: 309.2 3rd Qu.:4.200
Max. :25400 Max. :2055000.0 Max. :5.400
Services...GDP Creat.Ind...GDP Inflation Unemployment
Min. :50.00 Min. :1.000 Min. : 0.400 Min. : 2.300
1st Qu.:56.90 1st Qu.:2.000 1st Qu.: 1.600 1st Qu.: 5.500
Median :62.20 Median :2.600 Median : 3.400 Median : 6.700
Mean :62.64 Mean :3.291 Mean : 4.365 Mean : 6.794
3rd Qu.:64.90 3rd Qu.:3.950 3rd Qu.: 4.300 3rd Qu.: 8.100
Max. :82.00 Max. :7.400 Max. :25.700 Max. :11.800
NA's :6
X..pop.below.poverty.line Internet.penetration...population Median.age
Min. : 4.20 Min. :38.20 Min. :22.10
1st Qu.:21.70 1st Qu.:57.70 1st Qu.:25.70
Median :25.70 Median :69.70 Median :28.20
Mean :27.65 Mean :68.42 Mean :28.28
3rd Qu.:32.70 3rd Qu.:79.90 3rd Qu.:31.30
Max. :59.30 Max. :93.10 Max. :35.00
X..pop.25.54 Education.invest...GDP
Min. :34.12 Min. :2.800
1st Qu.:39.23 1st Qu.:4.400
Median :40.19 Median :5.000
Mean :39.88 Mean :5.082
3rd Qu.:41.08 3rd Qu.:5.900
Max. :44.03 Max. :7.400
pairs(orangeec[,6:10])
library(ggplot2)
ggplot()+geom_histogram(data=orangeec,aes(x=Internet.penetration...population),
fill="lightblue",color="darkblue",binwidth=5)+
labs(x="Penetración de Internet (%) población", y="Cantidad de Países",
title="Penetración de Internet en LATAM")+
scale_x_continuous(breaks=seq(38, max(96), 2))+
theme(legend.position="none")+
theme(panel.background=element_blank(),
panel.grid.major=element_blank(), panel.grid.minor=element_blank())
library(dplyr)
mean <- mean(orangeec$GDP.PC)
orangeec <- orangeec %>%
mutate(strongEconomy = ifelse(GDP.PC < mean,
"Por debajo del promedio PIB", "Por encima del promedio PIB"))
orangeec <- orangeec %>%
mutate(strongEconomy = ifelse(GDP.PC < mean,
"Por debajo del promedio PIB", "Por encima del promedio PIB"))
El Boxplot indica que los países por encima del promedio del PIB tienen una dispersión mucho más alta en relación a los aportes de la economía naranja al PIB del país. CUIDADO, contrastar con desviación estándar.
#cierre
cajas <- c(1,2,3,4,5,6,7,8)
tiempo <- c(10,9,8,5.8,6,3,1.8,1)
plot(tiempo~cajas)
plot(orangeec$Services...GDP~orangeec$Education.invest...GDP)
# scatterplot por ser dos variables numéricas, numéricos con factores dará un boxplot
boxplot(mtcars$mpg ~ mtcars$Peso)
Tips:
Cuando no tengamos un DataFrame completo, siempre podemos usar los vectores para construir visualizaciones.
Utilizando plot tenemos una representación automática de los datos, cuando pasamos dos variables numéricas obtenemos un scatterplot y cuando pasamos una numérica y otras categóricas obtenemos un boxplot.
Recomendaciones para seguir:
Lectura Recomendada:
https://bookdown.org/jboscomendoza/r-principiantes4/
http://eio.usc.es/pub/pateiro/files/pubdocentepracticasestadistica.pdf
https://www.povertyactionlab.org/sites/default/files/r-cheat-sheet.pdf
https://rstudio.com/wp-content/uploads/2015/04/ggplot2-spanish.pdf